五、DAO开发的方式
使用 Mybatis开发 Dao,通常有两个方法,即原始 Dao 开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。也就是我们之前用的方式
5.1 dao 代理的开发
现在我们来一起总结一下代理方式开发dao:
-
1)写一个dao接口,定义操作方式
-
2)需要针对dao接口,写一个对应的映射配置文件
-
3)映射文件中,namespace对应接口的全名
-
4)映射文件中的每个标签的id与接口的方法名称对应
-
5)映射文件中的parameterType指定的类型与接口方法参数类型一致
-
6)映射文件中的resultType指定的类型与接口方法返回类型一致
-
7)在主配置文件中,除了配置连接数据库信息、连接池信息外,还要指定加载的接口映射文件
-
8)在执行时候,mybatis会自动根据dao接口,生成代理对象,由代理对象调用具体的实现方法。
5.2 dao 传统开发
mybatis除了支持dao接口代理的开发方式外,还支持传统的写dao接口、dao实现的方式进行dao开发。
5.2.1 dao接口
package com.dfbz.dao;
import com.dfbz.entity.Emp;
import java.util.List;
public interface EmpDao {
// 统计总记录数
Long count();
// 查询全部
List<Emp> findAll();
// 模糊查询
List<Emp> findByName(String name);
// 新增用户
void save(Emp emp);
// 修改用户
void update(Emp emp);
// 删除用户
void delete(Integer id);
// 主键查询
Emp findById(Integer id);
}
5.2.2 接口映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 名称空间,指定对哪个接口进行映射-->
<mapper namespace="com.dfbz.dao.EmpDao">
<!--查询统计-->
<select id="count" resultType="long">
select count(1) from emp
</select>
<!--查询全部-->
<select id="findAll" resultType="emp">
select * from emp
</select>
<!--模糊查询-->
<select id="findByName" parameterType="string" resultType="emp">
select * from emp where name like #{name}
</select>
<!--新增用户-->
<insert id="save" parameterType="emp">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID();
</selectKey>
insert into emp VALUES (null,#{name},#{age},#{salary},#{addr})
</insert>
<!--修改用户-->
<update id="update" parameterType="emp">
update emp set name=#{name},age=#{age},salary=#{salary},
addr=#{addr} where id=#{id}
</update>
<!--删除用户-->
<delete id="delete" parameterType="int">
delete from emp where id=#{id}
</delete>
<!--主键查询-->
<select id="findById" parameterType="int" resultType="emp">
select * from emp where id=#{id}
</select>
</mapper>
5.2.3 测试类
package com.dfbz.test;
import com.dfbz.dao.EmpDao;
import com.dfbz.entity.Emp;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Demo01 {
InputStream is;
//获取工厂构造器对象
SqlSessionFactoryBuilder builder;
//获取session工厂
SqlSessionFactory factory ;
//获取session会话对象,与数据交互会话
SqlSession session;
EmpDao empDao;
@Before
public void before() throws Exception{
//获取主配置文件流
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
builder = new SqlSessionFactoryBuilder();
factory = builder.build(is);
session = factory.openSession(true);
empDao = session.getMapper(EmpDao.class);
}
@After
public void after() throws IOException { // 关闭session
session.close();
}
@Test
public void test1() {
Long count = session.selectOne("com.dfbz.dao.EmpDao.count");
System.out.println(count);
}
@Test
public void test2() {
List<Emp> userList= session.selectList("com.dfbz.dao.EmpDao.findAll");
System.out.println(userList);
}
@Test
public void test3() {
List<Emp> empList = session.selectList("com.dfbz.dao.EmpDao.findByName","%小%");
System.out.println(empList);
}
@Test
public void test4() {
session.insert("com.dfbz.dao.EmpDao.save",new Emp(null,"小刚",26,"江西吉安",3000.0));
}
@Test
public void test5() {
session.update("com.dfbz.dao.EmpDao.update",new Emp(2,"李小四",21,"福建南平",8000.0));
}
@Test
public void test6() {
session.delete("com.dfbz.dao.EmpDao.delete",2);
}
@Test
public void test7() {
Emp user = session.selectOne("com.dfbz.dao.EmpDao.findOne",1);
System.out.println(user);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131673.html