mybatis官方文档
什么是MybatisMybatis是常说的SSM框架中的M,它是一款持久层框架。Mybatis支持自定义SQl,存储过程和高级映射,免除了大量的JDBC代码操作。其主要是通过简单的xml文件或注解来配置和映射原始类型、接口和Java pojo中的对象
Mybatis框架基本代码 1.导入Mybatis(Maven)2.构建一个MybatisUtil.javaorg.mybatis mybatis 3.5.2
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//读取核心配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过SqlSessionFactoryBuilder构建SqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
//通过SqlSessionFactory对象创建SqlSession对象
return sqlSessionFactory.openSession(true);
}
}
2. 创建Mybatis-config.xml(核心配置文件)
一些常用的设置(smbms_项目),具体的可参照Mybatis中文文档进行设置
3.写自己的pojo类
注:为了使用写pojo类更加简洁,可以使用lombok插件,用注解实现setter/getter方法和构造方法等等.
步骤:
- 下载lombok插件
- 导入lombok的maven依赖
org.projectlombok
lombok
1.18.24
provided
- 在pojo类上使用注解开发
//加上空参构造,getter/setter方法,重写toString(),hashcode()和equals()
@Data
//加上全参构造
@AllArgsConstructor
//由于上一个注解加上了全参构造给空参构造弄没了,所以需要再加上空参构造
@NoArgsConstructor
public class User {
private Integer id;
private String userCode;
private String userName;
private String userPassword;
private Integer gender;
private Date birthday;
private String phone;
private String address;
private Integer userRole;
private Integer createdBy;
private Date creationDate;
private Date modifyDate;
private Integer modifyBy;
}
4.写pojo类对应的接口
没啥需要注意的,唯一一点就是在传参的时候可以使用注解@Param(“XXX”),如果有多个的话,等会就不需要在.xml对应的方法中写parameterType
public interface UserMapper {
//通过UserCode获取USer
User getLoginUser(@Param("userCode") String userCode) ;
//增加用户信息
int addUser(User user);
//通过条件查询UserList
List getUserList(@Param("userName") String userName, @Param("userRole") Integer userRole, @Param("from") Integer currentPageNo, @Param("pageSize") Integer pageSize);
//通过条件查询--用户表记录数
int getUserCount(@Param("userName") String userName,@Param("userRole") Integer userRole);
//通过UserID删除User
int deleteUserId(@Param("id") Integer id);
//通过UserID获取user
User getUserID(@Param("id") Integer id);
//修改用户信息
int modifyUser(User user);
//修改当前用户的密码
int updatePwd(@Param("id")Integer id,@Param("userPassword") String pwd);
}
注:一些简单的sql语句也可以使用注解开发,即将查询语句直接通过注解写在接口方法的上方就可
注意:
- 一个接口对应一个.xml,同时需要在namespace中与其接口对应上
- 每一个.xml都需要在核心配置文件中进行mapper
- 写返回值是int或者参数是int时应该写成_int(别名),Integer对应的是int(别名)
- 比较重要的是要会写sql,其他的应该没有什么问题
6.测试
步骤:
- 获取SqlSession对象
- 获取mapper
- 调用mapper的方法
- 关闭SqlSession对象
public class TestUser {
@Test
//通过UserCode查询用户
public void userTest01(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
User user=mapper.getLoginUser("admin");
System.out.println(user);
sqlSession.close();
}
@Test
//添加用户
public void userTest02(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
User user=new User();
user.setId(19);
user.setUserCode("xiaoliu");
user.setUserName("小刘");
user.setAddress("长安");
user.setBirthday(new Date());
user.setUserRole(3);
user.setUserPassword("1234567");
user.setGender(1);
user.setPhone("135123456789");
int i=mapper.addUser(user);
if(i>0){
System.out.println("插入成功");
}
sqlSession.close();
}
@Test
//查询指定条件的用户
public void userTest03(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
List users=mapper.getUserList(null,3,0,5);
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
@Test
//查询指定条件的用户个数
public void userTest04(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
int count= mapper.getUserCount("小刘",null);
System.out.println(count);
sqlSession.close();
}
@Test
//按照用户ID删除用户
public void userTest05(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
int i=mapper.deleteUserId(99);
if(i>0){
System.out.println("删除成功");
}
sqlSession.close();
}
@Test
//按照用户ID查找用户
public void userTest06(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
User user=mapper.getUserID(10);
System.out.println(user);
sqlSession.close();
}
@Test
//修改用户
public void userTest07(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
User user=new User();
user.setId(1);
user.setUserName("孙悟空");
user.setGender(1);
user.setBirthday(new Date());
user.setPhone("136123456789");
user.setAddress("北京市西城区");
int i=mapper.modifyUser(user);
if(i>0){
System.out.println("修改成功");
}
sqlSession.close();
}
@Test
//修改用户密码
public void userTest08(){
SqlSession sqlSession= MybatisUtil.getSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
int i=mapper.updatePwd(1,"0000000");
if(i>0){
System.out.println("修改成功");
}
sqlSession.close();
}
}
动态sql
根据Mybatis文档了解一些标签的使用即可
缓存mybatis缓存主要包括
-
一级缓存
在sqlSession中有用,当sqlSession关闭的时候缓存就释放 -
二级缓存
比一级缓存的作用域高,缓存在一个namespace中有效,当对应的一级缓存关闭(即会话关闭),一级缓存的数据就保存在了二级缓存
查找步骤:
- 先到二级缓存中找
- 二级缓存没有到一级缓存找
- 一级缓存没有到数据库中找



