(1)读取mybatis配置文件mybatis-config.xml
(2)加载映射文件Mapper.xml
(3)构建会话工厂
(4)创建SqlSession对象
建数据库
package com.qf.mapper;
import org.apache.ibatis.annotations.Insert;
public interface UserMapper {
Integer insert();
}
package com.qf.mapper;
import org.apache.ibatis.annotations.Insert;
public interface UserMapper {
@Insert("insert into tb_user(username,password)values('小刘','789')")
Integer insert();
}
insert into tb_user(username,password)values('小明','123')
注意:有注解实现的话就不用insert这里了
package com.qf;
import com.qf.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisDemo {
@Test
public void test() throws IOException {
//读取mybatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//开启事务,设置为自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//获取mapper对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//测试功能
Integer num = userMapper.insert();
// Assert.assertEquals(1,num);
System.out.println(num);
//手动提交
// sqlSession.commit();
}
}
(1)导入依赖
(2)创建SQLSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//1 通过mybatis的核心配置文件创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
(3)写mybatis-config.xml
(3)创建Mapper接口文件
/**
* 一个mapper就是一个表的操作
*/
public interface SysUserMapper {
SysUser selectById();
}
(4)创建mapper.xml
(5)在mybatis-config.xml文件中注册 mapper.xml文件
(6)创建Mapper代理对象
SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
SysUser sysUser = sysUserMapper.selectById();
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/db_mybatis
db.username=root
db.password=root
<-- 加载外部配置--!>
resultMap=""设置自定义映射关系
@Select("select * from ${table} where id=#{id}")
User selectByIdAndTable(
@Param("table") String table,
@Param("id") Integer id
);
注意:表名只能用字符串拼接
@Select("select * from ${table} where id=#{id}")
User selectByIdAndTable(
@Param("table") String table,
@Param("id") Integer id
);
@Test
public void selectByIdAndTableTest(){
//获取sql会话对象
SqlSession sqlSession = MyBatisDemo.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法测试
User user = mapper.selectByIdAndTable("tb_user",1);
System.out.println(user);
}
/**
* 通过map查询用户
* @return
*/
@Select("select * from tb_user where username=#{username} and password=#{password}")
User selectByUsernameAndPassword(Map map);
手动将数据写入到map中
@Test
public void selectByUsernameAndPassword(){
//获取sql会话对象
SqlSession sqlSession = MyBatisDemo.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map map = new HashMap<>();
map.put("username","tom");
map.put("password","123");
//调用方法测试
User user = mapper.selectByUsernameAndPassword(map);
System.out.println(user);
}
/**
* 通过User实体类 新增数据
* @param user
* @return
*/
@Insert("insert into tb_user(username,password) values(#{username},#{password})")
Integer insertToUser(User user);
@Test
public void insertToUserTest(){
//获取sql会话对象
SqlSession sqlSession = MyBatisDemo.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(null, "赵六", "111");
//调用方法测试
Integer num = mapper.insertToUser(user);
System.out.println(num);
}
@Select("select * from tb_user where id=#{id}")
Map findUserToMap(Integer id);
@Test
public void findUserToMapTest(){
//获取sql会话对象
SqlSession sqlSession = MyBatisDemo.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//直接返回
Map user = mapper.findUserToMap(1);
System.out.println(user);
}
注意:他可以去自动映射到map里面去
或者使用xml形式
@Select("select * from tb_user")
List
@Test
public void findAllUserToMapTest(){
//获取sql会话对象
SqlSession sqlSession = MyBatisDemo.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List
@MapKey("id")
Map findUserAllToMap();
@Test
public void findAllUserToMapTest(){
//获取sql会话对象
SqlSession sqlSession = MyBatisDemo.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map users = mapper.findUserAllToMap();
System.out.println(users);
}
用于定义别名,以便在映射文件中更方便地引用Java类型
在mybatis核心文件设置别名映射的时候,为指定的包下的所有类定义别名,以便在MyBatis的映射文件中更方便地引用这些类
type那里就可以不用写那么多了
注意:resultType也适用
id | resultMap的名称 |
type | resultMap对应的实体类(设别名后可直接写类名) |
extends | resultMap的继承 |
association | 一对一标签 |
collection | 一对多标签 |
子标签的id | 表示主键 |
property | 关联对象的属性名 |
column | 数据库字段名 |
结果集映射(列名与属性名不一致情况),多表查询、type简化
注意:extends可继承
一对多
注意:写resultMap的时候必须先关联上他的select语句才有提示
比如用户表和收货地址表 一对多的
28、主键 业务字段
30、索引适合:字段不长,查多写少不容易修改的
31、子查询里面。in 单列多行 from 多多 select 单行多列 where 单行单列
32、写多表查询的时候,多的话就 ,在写inner join
jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8&useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=root
maxActive=20
35、
36、select
属性
id | 对应mapper接口的方法名称 |
resultType(禁用) | 对应持久化类(entity) |
resultMap(多) | 对应定义的resultMap标签 |
37、查询禁止使用select *
38、表尽量使用别名
39、关于方法
id | 对应接口中方法的名称 |
keyproperty | 指定将数据库生成的键值赋给哪个Java对象的属性(属性通常用于定义或标识主键),告诉MyBatis在执行插入操作后是否检索数据库生成的键 |
useGeneratedKeys |
用于在执行插入操作后检索数据库生成的键(通常是自增主键) |
keyColumn |
用于指定数据库表中生成主键值的列名 |
给值、获取
名称 | 正解 |
id | 给查询标签使用 |
type | 对应的持久化框架 |
extends | 表示继承其他的resultMap(可以是其他的mapper.xml中的resultMap) |
从mapper接口中传递参数到SQL中
DTO QO 请求参数对象,控制层(Controller)业务的入参