Day14(3)Mybatis基于代理 Dao 实现 CRUD 操作

前言

一般实现接口都是自己编写实现类

public interface MyDao{
    
    
    public void save();
}

//编写实现类文件
public class MyDaoClass implements MyDao{
    
    
    public void save(){
    
    
         System.out.println("Hello");
    }
}

还可以通过动态代理,在程序运行时的内存中帮你生成实现类。
如**getMapper()**方法就能帮我们生成实现类。

一、准备

1、编写持久层接口:UserDao接口
src\main\java\cn\cyl\dao\UserDao.java

public interface UserDao {
    
    
}

2、编写持久层接口的映射配置:UserDao.xml
src\main\resources\cn\cyl\dao\UserDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--mapper的约束文件-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace要求写接口的全类名:包名+类名=全类名-->
<mapper namespace="cn.cyl.dao.UserDao">

</mapper>

3、在核心配置文件SqlMapConfg.xml文件配置该映射
src\main\resources\SqlMapConfig.xml

<!--配置多个映射文件,告知mybatis映射配置的位置-->
<mappers>
    <mapper resource="UserMapper.xml"/>
    <mapper resource="cn/cyl/dao/UserDao.xml"/>
</mappers>

4、User实体类、user表
src\main\java\cn\cyl\bean\User.java

public class User {
    
    
    private int id;
    private String username;
    private Date birthday;
    private int sex;
    private String address;
    //省略get set toString方法
    }

在这里插入图片描述

注意:

  1. 持久层接口和持久层接口的映射配置必须在相同的包下
    在这里插入图片描述
  2. 持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类
  3. SQL 语句的配置标签< select>,< insert>,< delete>,< update>的 id 属性必须和持久层接口的方法名相同

二、根据id查询

1、UserDao接口中添加方法

public interface UserDao {
    
    
    User findById(int i);
}

2、UserDao.xml映射文件配置< select>标签

<mapper namespace="cn.cyl.dao.UserDao">
    <!--使用代理以后,id必须是方法名-->
    <select id="findById" parameterType="int" resultType="cn.cyl.bean.User">
        select * from user where id = #{id};
    </select>
</mapper>

3、加入查询的测试方法

@Test
public void selectTest01(){
    
    
    //创建SqlSession对象
    SqlSession sqlSession = MySessionUtils.getSession();
    //getMapper()方法:对你编写的接口使用动态代理技术实现,直接返回实现类对象,即代理对象
        //代理对象的方法内部就是查询sql,并且执行jdbc代码
    //参数:class<T> aClass   
    UserDao dao = sqlSession.getMapper(UserDao.class);
    //定义变量接收
    User user = dao.findById(1);
    //打印结果
    System.out.println(user);
    //释放资源
    sqlSession.close();
}

4、控制台输出
在这里插入图片描述

三、根据用户名模糊查询

1、UserDao接口中添加方法

List<User> findByKeyword(String s);

2、UserDao.xml映射文件配置< select>标签

<select id="findByKeyword" parameterType="string" resultType="User">
    select * from user where username like #{keyword}
</select>

3、加入查询的测试方法

@Test
public void selectTest02(){
    
    
    //创建SqlSession对象
    SqlSession sqlSession = MySessionUtils.getSession();
    //返回接口的实现类对象
    UserDao dao = sqlSession.getMapper(UserDao.class);
    //搜索姓张的人
    List<User> list = dao.findByKeyword("张%");
    for (User user:list){
    
    
        System.out.println(user);
    }
    sqlSession.close();
}

4、控制台输出
在这里插入图片描述

四、保存用户

1、UserDao接口中添加方法

void saveUser(User user);

2、UserDao.xml映射文件配置< insert>标签

<insert id="saveUser" parameterType="user">
    insert into user values(null,#{username},#{birthday},#{sex},#{address})
</insert>

3、加入插入的测试方法

@Test
    public void insertTest04(){
    
    
        //创建SqlSession对象
        SqlSession sqlSession = MySessionUtils.getSession();
        
        UserDao dao = sqlSession.getMapper(UserDao.class);
        //定义接口
        User user = new User();
//      user.setId(101);
        user.setUsername("jack");
        user.setAddress("北京");
        user.setBirthday(new Date());
	//执行存储方法
        dao.saveUser(user);
	//提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();
    }

4、控制台输出
在这里插入图片描述
在这里插入图片描述

五、根据id删除用户

1、UserDao接口中添加方法

void deleteById(int i);

2、UserDao.xml映射文件配置< delete>标签

<delete id="deleteById" parameterType="int">
    delete from user where id = #{id}
</delete>

3、加入删除的测试方法

@Test
public void deleteTest03(){
    
    
    //创建SqlSession对象
    SqlSession sqlSession = MySessionUtils.getSession();
    //返回接口的实现类对象
    UserDao dao = sqlSession.getMapper(UserDao.class);
    //删除id为104的用户
    dao.deleteById(104);
    //提交事务
    sqlSession.commit();
    //释放资源
    sqlSession.close();
}

4、控制台输出
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43639081/article/details/108822170