Mybatis的学习总结(一)——使用配置文件实现增删改查
在使用Mybatis作为持久层来进行操作数据库,有很多的操作都是一样的,基本上都是先得到session,然后调用session提供的相关方法进行操作,接着提交session,最后关闭session。那么,对于实体类而言,基本的操作都是些增删改查操作。没有必要为了不同的实体类,编写多个重复的dao层。那么,可以编写一套通用的增删改查操作模板。ok,现在让我们先来写一个有关于该模板的一个接口。
public interface IBaseDao<T> {
//save
public void save(T t);
//delete
public boolean delete(T t);
//update
public boolean update(T t);
//search
public List<T> search(T t);
//size
public int size();
}
接口写好了,下面让我们来写一下该接口的一个实现类:
public class BaseDao{
public void save(String statement , Object obj) {
SqlSession session = MyBatisUnit.getSession();
try{
session.insert(statement , obj);
session.commit();
}finally{
session.close();
}
}
public boolean delete(String statement , Object obj) {
int num = 0;
SqlSession session = MyBatisUnit.getSession();
try{
num = session.delete(statement , obj);
session.commit();
}finally{
session.close();
}
return num != 0;
}
public boolean update(String statement , Object obj) {
int num = 0;
SqlSession session = MyBatisUnit.getSession();
try{
num = session.update(statement, obj);
session.commit();
}finally{
session.close();
}
return num != 0;
}
public List search(String statement , Object obj) {
List result = null;
SqlSession session = MyBatisUnit.getSession();
try{
result = session.selectList(statement, obj);
session.commit();
}finally{
session.close();
}
return result;
}
public int size(String statement) {
SqlSession session = MyBatisUnit.getSession();
Integer result = null;
try{
result = session.selectOne(statement);
session.commit();
}finally{
session.close();
}
if(result != null)
return result.intValue();
return 0;
}
}
另外,在Mybatis提供的帮助文档的时候,有这么一句话:
SqlSessionFactory 一旦被创建,SqlSessionFactory 应该在你的应用执行期间都存在。没有理由来处理或重 新创建它。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次。 这样的 操作将被视为是非常糟糕的。 因此 SqlSessionFactory 的最佳范围是应用范围。 有很多方法可 以做到, 最简单的就是使用单例模式或者静态单例模式。
我编写的SqlSessionFactory就是根据上面的这句话来实现的,不过我对其进行了一个封装,我帮Mybatis需要的SqlSessionFactory以及SqlSession封装成了MybatisUnit静态类,该类的代码为:
public class MyBatisUnit {
private static final class LazyHolder
{
private static InputStream is = MyBatisUnit.class.getClassLoader()
.getResourceAsStream("config.xml");
private static final SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
}
public static SqlSessionFactory getSessionFactory()
{
return LazyHolder.sessionFactory;
}
public static SqlSession getSession()
{
return getSessionFactory().openSession();
}
public static SqlSession getSession(boolean isAutoCommit)
{
return getSessionFactory().openSession(isAutoCommit);
}
}
好了,以上的基本操作都完成了,现在,让我们使用上面的类,来完成一个具体的实体类的增删改查操作。
public class SalaryDao implements IBaseDao<salary> {
BaseDao dao = new BaseDao();
@Override
public void save(salary sal) {
dao.save("cn.jiang.mapper.salaryMapper.save", sal);
}
@Override
public boolean delete(salary sal) {
return dao.delete("cn.jiang.mapper.salaryMapper.delete", sal);
}
@Override
public boolean update(salary sal) {
return dao.update("cn.jiang.mapper.salaryMapper.update", sal);
}
@Override
public List<salary> search(salary sal) {
return dao.search("cn.jiang.mapper.salaryMapper.search", sal);
}
}
其实,到这里差不多就完成了。但是我还想在多说一句,其实我之前在用Mybatis进行操作的时候,使用int、String作为查询或者删除的参数,后面经过公司的一个师兄指点之后,我把它改成了类作为查询的参数,在写配置文件的时候,通过对属性的判断,来实现不同的操作方式。这样能够简化我们代码的编写量。下面,让我贴出我写的配置文件:
<!-- search -->
<select id="search" parameterType="cn.jiang.domain.salary"
resultMap="salaryEmployee">
select * from tb_salary
<where>
<choose>
<when test="salary_id != 0">
salary_id = #{salary_id}
</when>
<when test="bank_name != null">
bank_name = #{bank_name}
</when>
</choose>
</where>
</select>
这样,可以通过传递的salary类,来实现是全部查询还是通过salary_id或者bank_name来进行查询。
到这里,就结束了。不当之处,欢迎各位批评指正。
Mybatis的学习总结(一)——使用配置文件实现增删改查的更多相关文章
- mybatis实战教程(mybatis in action)之三:实现数据的增删改查
前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.I ...
- ssm学习(四)--完整的增删改查demo
上一篇文章简要介绍了将sping mvc加入整个框架,算是完成了ssm的集成.本节继续前面的内容,结合spring mvc做一个简单的增删改查demo. 1.首先,重写一下GeckoList.jsp页 ...
- ASP.NET学习笔记(3)——用户增删改查(三层)
说明(2017-10-6 11:21:58): 1. 十一放假在家也没写几行代码,本来还想着利用假期把asp.net看完,结果天天喝酒睡觉,回去的票也没买到,惨.. 2. 断断续续的把用户信息的页面写 ...
- Mybatis学习(二) - CRUD操作(增删改查操作)
直接上例子: 1.项目结构: 2.具体代码及配置 User.java package com.mybatis.bean; public class User { private int id; pri ...
- 【MyBatis】-----【MyBatis】---表级联系【一对一】--增删改查
一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...
- Mybatis select、insert、update、delete 增删改查操作
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBatis 可以使用简单的XML ...
- python3配置文件的增删改查,记录一下
#!/usr/bin/env python3 import json #json模块,用于将像字典的字符串转换为字典 import re #re模块,查找替换 import shutil #copy文 ...
- mongo学习笔记(一):增删改查
安装:我是按这篇来弄的 一.Insert 1.db.person.insert({"name":"jack","age":20}) 2.va ...
- 【EF学习笔记04】----------EF简单增删改查
第一步:创建上下文对象 using(var db = new Entities()) { //数据操作 } 新增 UserInfo user = new UserInfo() { UserName = ...
随机推荐
- mysql一个表中多个字段对应另一个表的id如何查询?
比如有如下2个表 a 和baaID b1ID b2ID b3ID1 1 3 52 2 4 6bbID bCon1 苹果2 香蕉3 国内4 国外5 出口6 进口其中a表中的b1ID,b2ID,b3ID都 ...
- makefile简单介绍
现在的IDE环境大多是高度集成的,只需要按一个按钮即可完成编译-汇编-链接的工作,但是实际在嵌入式开发的过程中,需要根据实际需要编写个性化的需求,这就需要掌握makefile的写法. 高级IDE的方便 ...
- VS2013程序打包部署(图解),vs2013部署
VS2013程序打包部署(图解),vs2013部署 首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方 ...
- led驅動芯片對LED燈具的要求
1.LED驅動芯片直流額定輸入電壓范圍應當8 - 40 v,覆蓋廣泛的應用需求.最好的壓縮能力大于45 v.當輸入交流12 v.24 v,簡單的橋式整流器輸出電壓可以遵循電網電壓波動,特別是在高電壓輸 ...
- 利用Tree命令生成磁盘文件列表
命令原型:D:/>tree /? 以图形显示驱动器或路径的文件夹结构.TREE [drive:][path] [/F] [/A]/F 显示每个文件夹中文件的名称./A 使用 ASCII 字符,而 ...
- (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?
(转载)http://s.yanghao.org/program/viewdetail.php?i=184313 php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗? class block ...
- doxygen学习笔记
下载doxygen:http://www.cnblogs.com/duxiuxing/p/4301015.html 学习思路 doxygen能够根据代码和注释生成文档.可想而知,doxygen对注释的 ...
- rails console --sandbox出现的安装错误解决方案
rails中可以用使用console命令行来测试运行rails应用程序,但是采用源码编译安装的话可能缺少readline动态库,导致ruby无法使用这个库此时如果调用rails console(rai ...
- Maven可继承的POM 元素
groupId :项目组 ID ,项目坐标的核心元素: version :项目版本,项目坐标的核心元素: description :项目的描述信息: organization :项目的组织信息: in ...
- SQL中Merge的用法
SQL中Merge的用法 Merge的用法 Merge可以完成以下功能: 1. 两个表之间数据的更新 2. 进行进销存更新库存 3. 进行表之间数据的复制 语法说明: 1. 在语句结束后一定要 ...