Mybatis笔记 - 原始Dao开发方法
使用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删除员工信息
Mybatis笔记 - 原始Dao开发方法的更多相关文章
- Mybatis的原始dao开发方法
在进入主题之前先提一下sqlSession.sqlSession是一个面向用户(程序员)的接口. sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象).selec ...
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)
5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...
- 【MyBatis学习03】原始dao开发方法及其弊端
上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使 ...
- Mybatis学习笔记(三) —— DAO开发方法
一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...
- mybatis使用原始Dao开发中存在的问题
1.Dao方法存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的送数据库操作方法. 2.调用SqlSession的数据库需要制定statement ...
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...
- 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...
- Mybatis学习(2)原始dao开发和使用mapper接口代理开发
基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...
- MyBatis开发Dao的原始Dao开发和Mapper动态代理开发
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...
随机推荐
- PL/SQL Developer 查看查询的执行计划
https://zhuanlan.zhihu.com/p/65771352 通过 PL/SQL Developer 查看查询的执行计划 1 什么是执行计划 执行计划是一条查询语句在 Oracle 中的 ...
- pandas-append()
DataFrame.append(self,other,ignore_index = False,verify_integrity = False,sort = Nore) 作用是将其他对象附加到调用 ...
- jeecg Online表单开发中新增自定义按钮
要求:给表单增加一个“确认”按钮,按钮功能更改选中数据的flag字段为1 点击“自定义按钮”,录入一个“确认”按钮 按钮编码:该编码在一个智能表单配置中唯一,该编码同时是按钮触发的JS函数名.例如:按 ...
- Mac电脑最常见的办公软件是什么?Notion for Mac多功能办公笔记软件使用方法
Notion for Mac是一款最新的高效率.办公类软件,相信许多用户在办公的时候需要打开特别多的在线工具,譬如Google Drive.Dropbox Paper.Confluence.GitHu ...
- Prometheus监控node-exporter常用指标含义
一.说明 最近使用Prometheus新搭建监控系统时候发现内存采集时centos6和centos7下内存监控指标采集计算公式不相同,最后采用统一计算方法并整理计算公式如下: 1 100-(node_ ...
- BZOJ 3626: [LNOI2014]LCA(树剖+差分+线段树)
传送门 解题思路 比较有意思的一道题.首先要把求\(\sum\limits_{i=l}^r dep[lca(i,z)]\)这个公式变一下.就是考虑每一个点的贡献,做出贡献的点一定在\(z\)到根节点的 ...
- python解决迅雷下载限制的方法
一.转换迅雷下载链接 import base64 url='thunder://QUFodHRwOi8veHVubGVpLnhpYXphaS16dWlkYS5jb20vMTkwOC/JqLa+Mi5I ...
- flutter 显示HTML代码
需求是后台返回的是富文本,所以需要吧富文本转成flutter 能识别的内容 找了几个插件只有这个比较好用写下来 dependencies: flutter_html: ^0.9.8 安装 下剩下的就比 ...
- centos6 & centos7搭建ntp服务器
原理 NTP(Network TimeProtocol,网络时间协议)是用来使计算机时间同步的一种协议.它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1 ...
- ASP.NET MVC Controller激活系统详解2
一.引言 此篇博文紧接上篇博文进行阐述,本篇博文阐述的主题是Controller激活和url路由 二.总述 ASP.NET路由系统是HTTP请求抵达服务端的第一道屏障,它根据注册的路由规则对拦截的请求 ...