mybatis基于代理dao实现CRUD(xml实现)

首先,简要概括一下mybatis 环境搭建步骤

第一步:创建 maven 工程
第二步:导入坐标
第三步:编写必要代码(实体类和持久层接口)
第四步:编写 SqlMapConfig.xml
第五步:编写映射配置文件
第六步:编写测试类

要使用mybatis代理dao实现CRUD有以下要求:

1、持久层接口和持久层接口的映射配置必须在相同的包下
2、持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名(com.xxx.xx.class)
3、SQL 语句的配置标签,,,的 id 属性必须和持久层接口的
方法名相同。

默认你已经搭建好mybatis环境并写好实体类和接口(此链接是环境搭建)(https://mp.csdn.net/mdeditor/96371976#)

一、根据 ID 查询

1.在持久层接口中添加 findById 方法
User findById(Integer userId);
2.在用户的映射配置文件中配置

<!-- 根据 id 查询 -->
<select id="findById" resultType="com.yx.domain.User" parameterType="int">
select * from user where id = #{id}
</select>

此处有些细节问题需要说明

**resultType 属性:**用于指定结果集的类型。
**parameterType 属性:**用于指定传入参数的类型。
**sql 语句中使用#{}字符:**它代表占位符,相当于jdbc的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。
**#{}中内容的写法:**由于数据类型是基本类型,所以此处可以随意写。

3.在测试类添加测试

@Before
    public void init() throws IOException {
        in = Resources.getResourceAsStream("SqlMapConfig.xml");

        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);

        sqlSession = factory.openSession();

        userDao = sqlSession.getMapper(IUserDao.class);

    }

@After
    public void destory() throws IOException {

        sqlSession.commit();
        sqlSession.close();
        in.close();
    }
@Test
public void testFindOneById() {
User user = userDao.findById(41);
System.out.println(user);
}

如此,一个根据用户ID查找用户的功能便实现了。其他查询操作读者可以自行操作试试。

二、保存操作

1.在持久层接口中添加新增方法

int saveUser(User user);

2.在用户的映射配置文件中配置

<!-- 保存用户-->
<insert id="saveUser" parameterType="com.yx.domain.User">
<!-- 配置保存时获取插入的 id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">
select last_insert_id();
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>

此处有些细节问题需要说明

**parameterType 属性:**代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。
**sql 语句中使用#{}字符:**它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。
**#{}中内容的写法:**由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。它用的是 ognl 表达式。
**ognl 表达式:**它是 apache 提供的一种表达式语言,全称是:Object Graphic Navigation Language 对象图导航语言
它是按照一定的语法格式来获取数据的。
语法格式就是使用 #{对象.对象}的方式
#{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user.而直接写 username。

3.添加测试类中的测试方法

@Test
    public void testSaveUser(){
        User user = new User();
        user.setUsername("yue");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("合肥");

        System.out.println(user);

        userDao.saveUser(user);

        System.out.println(user);
    }

如此,一个增加用户的功能便实现了。

三、用户更新

1.在持久层接口中添加更新方法

int updateUser(User user);

2.在用户的映射配置文件中配置

<update id="updateUser" parameterType="com.yx.domain.User">
        update user set username = #{username},birthday=#{birthday},sex=#{sex},address=#{address} where id =#{id}
    </update>

3.加入更新的测试方法

@Test
    public void testUpdateUser(){
        User user = userDao.findById(56);

        user.setUsername("xi");

        int res = userDao.updateUser(user);

        System.out.println(res);
    }

如此,一个更新用户信息的功能便实现了。

四、用户删除

1.在持久层接口中添加删除方法

int deleteUserById(Integer id);

2.在用户的映射配置文件中配置

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

3.加入删除的测试方法

@Test
    public void testDeleteUserById(){
        userDao.deleteUserById(56);
    }

如此,一个删除用户的功能便实现了。

以上,就是最基本的mybatis中的CRUD操作。至于更复杂的条件查询,模糊查询,读者可以先自行琢磨一下。博主以后还会写一篇相关的帖子。

发布了25 篇原创文章 · 获赞 4 · 访问量 1744

猜你喜欢

转载自blog.csdn.net/maybe_ice/article/details/96890141