在Spring中封装Mybatis
1、简要说明
在封装中使用到的文件如下:
| 文件名 | 作用 |
|---|---|
| configuration.xml | Mybatis的配置文件,引入实体别名等 |
| spring-mvc-mybatis.xml | 引入Mybatis,为Mybatis配置数据源,并引入Mybatis的封装类 |
| IDao.java | Mybatis的封装的基础接口 |
| MyBatisBaseDao.java | IDao的实现类 |
| BaseService.java | Service层的基本接口,用于封装Dao层 |
| DefaultBaseService.java | 实现BaseService,引入Dao,隐藏Dao层 |
2、mybatis配置文件configuration.xml
configuration.xml用于配置mybatis,包括实体别名的配置和map 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>
<typeAliases>
<typeAlias type="com.zhey.test.entity.Student" alias="student"/>
</typeAliases>
<mappers>
<mapper resource="com/zhey/test/entity/student.xml"/>
</mappers>
</configuration>
3、Spring配置文件spring-mvc-mybatis.xml
spring-mvc-mybatis.xml用于将mybatis引入spring管理中。包括数据源的设置和mybatis基础类的引入。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"
default-autowire="byName" default-lazy-init="false">
<!-- mybatis配置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"></ref>
</property>
<property name="configLocation" value="classpath:configuration.xml"/>
</bean>
<bean id="mybatisBaseDao" class="org.myframework.db.mybatis.dao.MybatisBaseDao">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
4、IDao.java
IDao引入一些公共函数接口,代码如下:
package org.myframework.db.mybatis.dao;
import org.springframework.dao.DataAccessException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* Created by zhey on 17-3-2.
*/
public interface IDao {
int delete(String sqlid) throws DataAccessException;
int delete(String sqlid, Object args) throws DataAccessException;
Object insert(String sqlid) throws DataAccessException;
int insert(String sqlid, Object args) throws DataAccessException;
int update(String sqlid) throws DataAccessException;
int update(String sqlid, Object args) throws DataAccessException;
// int updateWithAuthority(String sqlid, ParamDTO args) throws DataAccessException;
Object queryForObject(String sqlid) throws DataAccessException;
Object queryForObject(String sqlid, Object args) throws DataAccessException;
List queryForList(String sqlid) throws DataAccessException;
List queryForList(String sqlid, Object args) throws DataAccessException;
List queryForPage(String sqlid, Object args, int var3, int var4);
Connection getConnection() throws SQLException;
// SqlMapClient getSqlMapClient();
// SqlMapClientTemplate getSqlMapClientTemplate();
// int saveOldFieldData(ParamDTO sqlid, BaseDomain args, String var3, String var4);
int insertBatch(String sqlid, List<?> args) throws DataAccessException;
// int updateWithAuthority(String sqlid, IPo args);
// List<?> queryForPage(String sqlid, String args, IPo var3);
// IPage queryForPageWithCount(String sqlid, String args, Object var3, IPo var4);
// void callPrc(String sqlid, IPo args) throws PrcException;
}
5、MybatisBaseDao.java
MybatisBaseDao实现IDao接口,代码如下:
package org.myframework.db.mybatis.dao;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* Created by zhey on 17-3-2.
*/
public class MybatisBaseDao implements IDao {
private SqlSessionFactory sqlSessionFactory;
public SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public <T> List<T> queryForList1(String query) {
SqlSession session = sqlSessionFactory.openSession();
List<T> objs = session.selectList("student.getall");
return objs;
}
@Override
public int delete(String sqlid) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.delete(sqlid);
}
@Override
public int delete(String query, Object obj) {
SqlSession session = sqlSessionFactory.openSession();
return session.delete(query, obj);
}
@Override
public Object insert(String sqlid) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.insert(sqlid);
}
@Override
public int insert(String sqlid, Object args) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.insert(sqlid, args);
}
@Override
public int update(String sqlid) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.update(sqlid);
}
@Override
public int update(String sqlid, Object args) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.update(sqlid, args);
}
@Override
public Object queryForObject(String sqlid) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.selectOne(sqlid);
}
@Override
public Object queryForObject(String sqlid, Object args) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.selectOne(sqlid, args);
}
@Override
public List queryForList(String sqlid) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.selectList(sqlid);
}
@Override
public List queryForList(String sqlid, Object args) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return session.selectList(sqlid, args);
}
@Override
public List queryForPage(String sqlid, Object args, int var3, int var4) {
return null;
}
@Override
public Connection getConnection() throws SQLException {
return sqlSessionFactory.openSession().getConnection();
}
@Override
public int insertBatch(String sqlid, List<?> args) throws DataAccessException {
SqlSession session = sqlSessionFactory.openSession();
return 0;
}
// @Override
public int add(String query, Object obj) {
SqlSession session = sqlSessionFactory.openSession();
return session.insert(query, obj);
}
}
6、BaseService.java
BaseService是对IDao的封装,引入IDao。函数封装不完整,可根据IDao的函数添加,代码如下:
package org.myframework.db.mybatis.service;
import java.util.List;
/**
* Created by zhey on 17-3-2.
*/
public interface BaseService {
<T> List<T> queryForList(String query);
}
7、DefaultBaseService.java
DefaultBaseService是对BaseServcie的实现,引入BaseService和DefaultBaseService的想法是在Service中继承DefaultBaseService并调用DefaultBaseService中的函数,就可以不用在显示的调用Dao层的函数,代码如下:
package org.myframework.db.mybatis.service;
import org.myframework.db.mybatis.dao.IDao;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* Created by zhey on 17-3-2.
*/
public class BaseServiceImpl implements BaseService {
@Autowired
public IDao dao;
public <T> List<T> queryForList(String query) {
List<T> objs = dao.queryForList(query);
return objs;
}
}
最后吐槽一下:CSDN markdown的目录真心不好用
返回目录
本文详细介绍了如何在Spring中封装Mybatis,包括配置mybatis的configuration.xml,整合Spring的spring-mvc-mybatis.xml,定义IDao接口,实现MybatisBaseDao,创建BaseService和DefaultBaseService来简化Service层的代码。通过这样的封装,可以更方便地管理和使用Mybatis。
817

被折叠的 条评论
为什么被折叠?



