大家好,又见面了,我是你们的朋友全栈君。
在springMVC+mybatis框架开发时,通常我们会写多的dao,如userDao,roleDao,departDao等等,这样开发效果就很慢,不是很好,所以编写个通用dao.
SqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用。
当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证使用的SqlSession是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。
SqlSessionTemplate实现了SqlSession,这就是说要对MyBatis的SqlSession进行简易替换。
SqlSessionTemplate通常是被用来替代默认的MyBatis实现的DefaultSqlSession,因为它不能参与到Spring的事务中也不能被注入,因为它是线程不安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。
SqlSessionTemplate对象可以使用SqlSessionFactory作为构造方法的参数来创建。
例如:
<!-- 创建sqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml" p:mapperLocations="classpath:com/mf/*/entity/mapper/*.xml" p:plugins-ref="pagePlugin" />
<!-- 配置sqlSessionTemplate -->
<bean class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
编写步骤:
1.编写dao接口
public interface DAO {
/** * 保存对象 * @param str * @param obj * @return * @throws Exception */
public Object save(String str, Object obj) throws Exception;
/** * 修改对象 * @param str * @param obj * @return * @throws Exception */
public Object update(String str, Object obj) throws Exception;
/** * 删除对象 * @param str * @param obj * @return * @throws Exception */
public Object delete(String str, Object obj) throws Exception;
/** * 查找对象 * @param str * @param obj * @return * @throws Exception */
public Object findForObject(String str, Object obj) throws Exception;
/** * 查找对象 * @param str * @param obj * @return * @throws Exception */
public Object findForList(String str, Object obj) throws Exception;
/** * 查找对象封装成Map * @param s * @param obj * @return * @throws Exception */
public Object findForMap(String sql, Object obj, String key , String value) throws Exception;
}
2.编写dao 实现类
public class DaoSupport implements DAO {
@Resource(name = "sqlSessionTemplate")
private SqlSessionTemplate sqlSessionTemplate;
/** * 保存对象 * @param str * @param obj * @return * @throws Exception */
public Object save(String str, Object obj) throws Exception {
return sqlSessionTemplate.insert(str, obj);
}
/** * 批量更新 * @param str * @param obj * @return * @throws Exception */
public Object batchSave(String str, List objs )throws Exception{
return sqlSessionTemplate.insert(str, objs);
}
/** * 修改对象 * @param str * @param obj * @return * @throws Exception */
public Object update(String str, Object obj) throws Exception {
return sqlSessionTemplate.update(str, obj);
}
/** * 批量更新 * @param str * @param obj * @return * @throws Exception */
public void batchUpdate(String str, List objs )throws Exception{
SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
//批量执行器
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
try{
if(objs!=null){
for(int i=0,size=objs.size();i<size;i++){
sqlSession.update(str, objs.get(i));
}
sqlSession.flushStatements();
sqlSession.commit();
sqlSession.clearCache();
}
}finally{
sqlSession.close();
}
}
/** * 批量更新 * @param str * @param obj * @return * @throws Exception */
public Object batchDelete(String str, List objs )throws Exception{
return sqlSessionTemplate.delete(str, objs);
}
/** * 删除对象 * @param str * @param obj * @return * @throws Exception */
public Object delete(String str, Object obj) throws Exception {
return sqlSessionTemplate.delete(str, obj);
}
/** * 查找对象 * @param str * @param obj * @return * @throws Exception */
public Object findForObject(String str, Object obj) throws Exception {
return sqlSessionTemplate.selectOne(str, obj);
}
/** * 查找对象 * @param str * @param obj * @return * @throws Exception */
public Object findForList(String str, Object obj) throws Exception {
return sqlSessionTemplate.selectList(str, obj);
}
public Object findForMap(String str, Object obj, String key, String value) throws Exception {
return sqlSessionTemplate.selectMap(str, obj, key);
}
}
3.那么怎么使用呢?
public class UserService {
@Resource(name = "daoSupport")
private DaoSupport dao;
/* *通过id获取数据 */
public User getUserAndRoleById(String userid) throws Exception {
return (User) dao.findForObject("UserMapper.getUserAndRoleById", <span style="font-family: Arial, Helvetica, sans-serif;">userid</span>);
}
}
4. UserMapper.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="UserMapper">
<select id="getUserById" parameterType="String" resultType="User">
select * from SYS_USER where userId=#{userId}
</select>
lt;/mapper>
namespqce:是随意起的 不是规定必须叫 userNamespace
5.mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="Test">
<select id="queryDataCount" parameterType="com.mybatis.Test" resultType="int">
SELECT COUNT(1) FROM INF_CONSUMER T WHERE T.UUID = #{uuid}
</select>
</mapper>
6.具体DAO配置
package com.dwr;
import org.springframework.stereotype.Repository;
import com.mybatis.Test;
@Repository
public class TestDAO extends MyBatisDAO {
public int getCount(Test test) {
return (Integer) this.getObject("Test.queryDataCount", test);
}
}
这样一个通用的Dao解决了。
转载:https://blog.csdn.net/hellolovelife/article/details/78476099
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138389.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...