使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法。原始Dao的开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员需要 编写 Dao接口Dao实现类,但对 SQL映射文件、pojo类、sqlMapConfig.xml等 配置文件 并不做改变。

一、映射文件

1、Emp.xml文件

 <?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">
<mapper namespace="test">
<!-- 根据id获取员工信息 -->
<select id="findEmpById" parameterType="int" resultType="po.Emp">
select * from emp where empno = #{empno}
</select> <!-- 自定义条件查询员工列表 -->
<select id="findEmpByEmpname" parameterType="java.lang.String" resultType="po.Emp">
select * from emp where ename like '%${value}%'
</select> <!-- 添加员工信息 -->
<insert id="insertEmp" parameterType="po.Emp">
<selectKey keyProperty="empno" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into emp(ename,job) values(#{ename},#{job})
</insert> <!-- 删除员工信息 -->
<delete id="deleteEmpById" parameterType="int">
delete from emp where empno=#{empno}
</delete> <!-- 更新员工信息 -->
<update id="updateEmp" parameterType="po.Emp">
update emp set ename=#{ename},job=#{job}
where empno=#{empno}
</update>
</mapper>

2、pojo类

 package po;
//导入相关类
public class Emp {
private int empno;
private String ename;
private String job;
private int mgr;
private Date hiredate;
private double sal;
private double comm;
private int deptno; @Override
public String toString() {
return "编号:"+empno+" 姓名:"+ename+" 工作:"+job+"\n";
}
set()/get()方法 ...
}

3、SqlMapConfig.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/
scott?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="su486213" />
</dataSource>
</environment>
</environments> <!-- 加载映射文件 -->
<mappers>
<mapper resource="SqlMap/Emp.xml"/>
</mappers>
</configuration>

二、Dao层

1、Dao类

 package Dao;
//导入相关类
public interface EmpDao {
public Emp findEmpById(int empno);
public List<Emp> findEmpByEmpname(String tname);
public int insertEmp(Emp emp);
public int deleteEmpById(int empno);
public int updateEmp(Emp emp);
}

2、DaoImp类

实现步骤:① 构造方法:在dao实现类的构造方法中注入SqlSessionFactory

② 方法体:在方法体内通过SqlSessionFactory创建SqlSession

 package Dao;
//导入相关类
public class EmpDaoImp implements EmpDao { private SqlSessionFactory sqlSessionFactory ;
// 在dao实现类的构造方法中注入注入SqlSessionFactory
public EmpDaoImp(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public Emp findEmpById(int empno) {
//在方法体内通过SqlSessionFactory创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
Emp emp = null;
//使用finally语句,保证释放资源操作必须执行
try {
emp = sqlSession.selectOne("test.findEmpById",empno);
}finally {
sqlSession.close();
}
return emp;
} @Override
public List<Emp> findEmpByEmpname(String ename) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<Emp> emp = null;
try {
emp = sqlSession.selectList("test.findEmpByEmpname",ename);
}finally {
sqlSession.close();
}
return emp;
} @Override
public int insertEmp(Emp emp) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int flag = 0;
try {
flag = sqlSession.insert("test.insertEmp",emp);
}finally{
//必须提交,更新数据
sqlSession.commit();
sqlSession.close();
}
return flag;
} @Override
public int deleteEmpById(int empno) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int flag = 0;
try {
flag = sqlSession.delete("test.deleteEmpById",empno);
}finally{
//必须提交,更新数据
sqlSession.commit();
sqlSession.close();
}
return flag;
} @Override
public int updateEmp(Emp emp) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int flag = 0;
try {
flag = sqlSession.update("test.updateEmp",emp);
}finally{
//必须提交,更新数据
sqlSession.commit();
sqlSession.close();
}
return flag;
}
}

三、测试程序

1、Junit单元测试

 package Test;
//导入相关类
public class Mybatis_Dao { //使用 单例模式 管理会话工厂
private SqlSessionFactory sqlSessionFactory;
@Before
public void createSqlSessionFactory() throws IOException {
// Mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会化工厂,传入Mybatis配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} // 根据 id查询部门信息
@Test
public void testFindEmpById() {
EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
Emp emp = empDaoImp.findEmpById(7369);
System.out.println(emp);
} // 根据员工姓名模糊查询员工信息
@Test
public void testFindEmpByEmpname() {
EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
List<Emp> emp = empDaoImp.findEmpByEmpname("th");
for(Emp e:emp) {
System.out.println(e);
}
} // 添加员工信息
@Test
public void testInsert() {
EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
Emp emp = new Emp();
emp.setEname("test");
emp.setJob("test");
int flag = empDaoImp.insertEmp(emp);
System.out.println("自增主键值:"+emp.getEmpno());
} // 更新员工信息
@Test
public void testUpdate() {
EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
Emp emp = new Emp();
emp.setEmpno(7946);
emp.setEname("test7946");
emp.setJob("test7946");
int flag = empDaoImp.updateEmp(emp);
if(flag == 1)
System.out.println("更新成功!");
} // 根据id删除员工信息
@Test
public void testDelete() {
EmpDaoImp empDaoImp = new EmpDaoImp(sqlSessionFactory);
int flag = empDaoImp.deleteEmpById(7946);
if(flag == 1)
System.out.println("删除成功!");
}
}

2、测试结果

(1)根据 id查询部门信息

(2)根据员工姓名模糊查询员工信息

(3)添加员工信息

(4)更新员工信息

(5)根据id删除员工信息

最新文章

  1. WebApi跨域问题
  2. Replace conditional with Polymorphism
  3. HTML、JavaScript之单双引号转义
  4. MySql 查询数据库中所有表名
  5. java equals 和 &quot;==&quot; 比较
  6. LR脚本技巧
  7. PAT 解题报告 1050. String Subtraction (20)
  8. 不得不看的JVM内存管理
  9. Linux网络服务12——NFS共享服务
  10. SharePoint&amp;quot;在数据表中编辑&amp;quot;不可用
  11. React Native 之极光推送jpush-react-native 手把手配置
  12. elasticsearch 踩坑
  13. css属性position: static|relative|absolute|fixed|sticky简单解析
  14. Redis学习第六课:Redis ZSet类型及操作
  15. vue按需引入element或mint
  16. Luogu 2540 斗地主增强版(搜索,动态规划)
  17. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
  18. 前端通信:ajax设计方案(二)---集成轮询技术
  19. Python OS模块操作文件和目录
  20. Python之协程(coroutine)

热门文章

  1. UartAssist串口调试工具
  2. 论文阅读笔记:《Interconnected Question Generation with Coreference Alignment and Conversion Flow Modeling》
  3. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoa
  4. Java HashSet和ArrayList的查找Contains()时间复杂度
  5. Eclipse+Marven + spring mvc 新建一个 Hello world 项目
  6. leetcode-399-除法求值
  7. 59 cuda 不同版本__half冲突问题 —— &quot;__half&quot; has no member &quot;x&quot;
  8. 事件绑定addEventListener
  9. &quot;Access denied for user &#39;root@localhost&#39; 试一下你的mysql是不是用任何密码都可以登录,如果是的话这里
  10. ES6新的特性有哪些?