在我的博客首页有s2sh整合的例子,现在要做的工作就是将此工程中hibernate换成mybatis,并且使用比较流行的annotation注解来实现。首先肯定是要将hibernate的jar包全部干掉,然后加上mybatis的jar包及其与spring整合所需jar包,下面只贴主要改动的类及其配置文件:
一.mybatis配置文件mybatis-config.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 alias="User" type="com.anxin.bean.User" />
- <typeAlias alias="Student" type="com.anxin.bean.Student" />
- </typeAliases>
- <mappers>
- <mapper resource="com/anxin/orm/mapping/User.xml" />
- <mapper resource="com/anxin/orm/mapping/Student.xml" />
- </mappers>
- </configuration>
二、bean的mapper文件
Student.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="Student">
- <!--
- <resultMap type="Student" id="studentResultMap">
- <id property="id" column="id" />
- <result property="name" column="name" />
- <result property="age" column="age" />
- <result property="sex" column="sex" />
- <result property="address" column="address" />
- </resultMap>
- -->
- <insert id="save" parameterType="Student">
- insert into student(name,age,sex,address)
- values(#{name},#{age},#{sex},#{address})
- </insert>
- <update id="update" parameterType="Student">
- update student set
- name=#{name},age=#{age},sex=#{sex},address=#{address} where
- id=#{id}
- </update>
- <delete id="delete" parameterType="Student">
- delete from student where id=#{id}
- </delete>
- <delete id="deleteById" parameterType="int">
- delete from student where id=#{id}
- </delete>
- <select id="findById" parameterType="int" resultType="Student">
- select * from student where id=#{id}
- </select>
- <select id="findAll" resultType="Student">
- select * from student
- </select>
- <select id="queryPage" resultType="Student" parameterType="map">
- select * from student u
- <where>
- <if test="name!=null and name!='' ">
- u.name like "%"#{name}"%"
- </if>
- <if test="sex!= null and sex!= '' ">and u.sex=#{sex}</if>
- </where>
- limit #{start},#{limit}
- </select>
- <select id="getTotalCounts" parameterType="map"
- resultType="Integer">
- select count(*)from student u
- <where>
- <if test="name!=null and name!='' ">
- u.name like "%"#{name}"%"
- </if>
- <if test="sex!= null and sex!= '' ">and u.sex=#{sex}</if>
- </where>
- </select>
- </mapper>
User.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="User">
- <!--
- <resultMap type="User" id="userResultMap">
- <id property="id" column="id" />
- <result property="username" column="username" />
- <result property="password" column="password" />
- </resultMap>
- -->
- <insert id="save" parameterType="User">
- insert into users values(#{username},#{password})
- </insert>
- <update id="update" parameterType="User">
- update users set username=#{username},password=#{password} where
- id=#{id}
- </update>
- <delete id="delete" parameterType="User">
- delete from users where id=#{id}
- </delete>
- <delete id="deleteById" parameterType="int">
- delete from users where id=#{id}
- </delete>
- <select id="findById" parameterType="int"
- resultType="User">
- select * from Users where id=#{id}
- </select>
- <select id="findAll" resultType="User">select * from Users</select>
- <select id="queryPage" resultType="User"
- parameterType="map">
- select * from users u
- </select>
- <select id="getTotalCounts" parameterType="map" resultType="Integer">
- select count(*)from users
- </select>
- <select id="login" parameterType="User"
- resultType="User">
- select * from users where username=#{username} and
- password=#{password}
- </select>
- </mapper>
- <p></p><pre name="code" class="plain"><pre></pre>三、spring配置文件applicationContext.xml
- <p></p>
- <p><span style="font-family:Helvetica,Tahoma,Arial,sans-serif"><span style="font-size:14px; line-height:25px"></span></span></p>
- <pre name="code" class="html"><?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:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-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/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
- <context:annotation-config></context:annotation-config>
- <context:component-scan base-package="com.anxin.struts.action" />
- <context:component-scan base-package="com.anxin.dao" />
- <context:component-scan base-package="com.anxin.service" />
- <bean id="propertyConfigurer"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath:db.properties</value>
- </list>
- </property>
- </bean>
- <!-- 定义使用C3P0连接池的数据源 -->
- <bean id="dataSource"
- class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <!-- 指定连接数据库的JDBC驱动 -->
- <property name="driverClass">
- <value>${driverClass}</value>
- </property>
- <!-- 连接数据库所用的URL -->
- <property name="jdbcUrl">
- <value>${jdbcUrl}</value>
- </property>
- <!-- 连接数据库的用户名 -->
- <property name="user">
- <value>${user}</value>
- </property>
- <!-- 连接数据库的密码 -->
- <property name="password">
- <value>${password}</value>
- </property>
- <!-- 设置数据库连接池的最大连接数 -->
- <property name="maxPoolSize">
- <value>20</value>
- </property>
- <!-- 设置数据库连接池的最小连接数 -->
- <property name="minPoolSize">
- <value>2</value>
- </property>
- <!-- 设置数据库连接池的初始化连接数 -->
- <property name="initialPoolSize">
- <value>2</value>
- </property>
- <!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->
- <property name="maxIdleTime">
- <value>20</value>
- </property>
- </bean>
- <bean id="sqlSessionFactory"
- class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="configLocation"
- value="classpath:mybatis-config.xml" />
- <property name="dataSource" ref="dataSource" />
- </bean>
- <!-- 数据库的事务管理器配置 -->
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
- <!-- 使用annotation定义数据库事务,这样可以在类或方法中直接使用@Transactional注解来声明事务 -->
- <tx:annotation-driven transaction-manager="transactionManager" />
- </beans></pre><br>
- 四、泛型基类BaseDAOImpl.java<br>
- <pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="java">package com.anxin.dao.impl;
- import java.io.Serializable;
- import java.util.List;
- import java.util.Map;
- import javax.annotation.Resource;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.mybatis.spring.support.SqlSessionDaoSupport;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import com.anxin.dao.BaseDAO;
- import com.anxin.util.PageListData;
- public class BaseDAOImpl<T, PK extends Serializable> extends
- SqlSessionDaoSupport implements BaseDAO<T, PK> {
- public static Logger logger = LoggerFactory.getLogger(BaseDAOImpl.class);
- @Autowired(required = true)
- @Resource(name = "sqlSessionFactory")
- public void setSuperSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
- super.setSqlSessionFactory(sqlSessionFactory);
- }
- // 保存
- public T save(T entity) {
- try {
- getSqlSessionTemplate().insert(
- entity.getClass().getSimpleName() + ".save", entity);
- return entity;
- } catch (RuntimeException re) {
- logger.error("save " + entity.getClass().getName() + " failed :{}",
- re);
- throw re;
- }
- }
- // 更新
- public void update(T entity) {
- try {
- this.getSqlSessionTemplate().update(
- entity.getClass().getSimpleName() + ".update", entity);
- } catch (RuntimeException re) {
- logger.error("update " + entity.getClass().getName()
- + " failed :{}", re);
- throw re;
- }
- }
- // 删除
- public void delete(T entity) {
- try {
- this.getSqlSessionTemplate().delete(
- entity.getClass().getSimpleName() + ".delete", entity);
- } catch (RuntimeException re) {
- logger.error("delete " + entity.getClass().getName()
- + " failed :{}", re);
- throw re;
- }
- }
- // 根据id删除某个对象
- public void delete(Class<T> entityClass, PK id) {
- try {
- this.getSqlSessionTemplate().delete(
- entityClass.getSimpleName() + ".deleteById", id);
- } catch (RuntimeException re) {
- logger.error("delete " + entityClass.getName() + "failed :{}", re);
- throw re;
- }
- }
- // 根据id加载某个对象
- public T findById(Class<T> entityClass, PK id) {
- try {
- return (T) this.getSqlSessionTemplate().selectOne(
- entityClass.getSimpleName() + ".findById", id);
- } catch (RuntimeException re) {
- logger.error("findById " + entityClass.getName() + "failed :{}",
- re);
- throw re;
- }
- }
- // 查找所有的对象
- public List<T> findAll(Class<T> entityClass) {
- try {
- return this.getSqlSessionTemplate().selectList(
- entityClass.getSimpleName() + ".findAll");
- } catch (RuntimeException re) {
- logger
- .error("findAll " + entityClass.getName() + "failed :{}",
- re);
- throw re;
- }
- }
- // 根据查询参数,当前页数,每页显示的数目得到分页列表
- public PageListData queryPage(Class<T> entityClass, Map param,
- int currentPage, int pageSize) {
- try {
- return new PageListData((Integer)getSqlSessionTemplate()
- .selectOne(entityClass.getSimpleName()+".getTotalCounts",param), pageSize, currentPage, this
- .getSqlSessionTemplate().selectList(
- entityClass.getSimpleName() + ".queryPage", param));
- } catch (RuntimeException re) {
- logger.error("findList " + entityClass.getName() + "failed :{}",
- re);
- throw re;
- }
- }
- }</pre><br>
- <br>
- <pre></pre>
- <pre></pre>
- <p></p>
- <pre></pre>
- <pre></pre>
- StudentDAOImpl.java<br>
- <p></p>
- <p><span style="font-family:Helvetica,Tahoma,Arial,sans-serif"><span style="font-size:14px; line-height:25px"><br>
- </span></span></p>
- <p><span style="font-family:Helvetica,Tahoma,Arial,sans-serif"><span style="font-size:14px; line-height:25px"></span></span></p>
- <pre name="code" class="java">package com.anxin.dao.impl;
- import org.springframework.stereotype.Repository;
- import com.anxin.bean.Student;
- import com.anxin.dao.StudentDAO;
- @Repository
- public class StudentDAOImpl extends BaseDAOImpl<Student, Integer> implements StudentDAO {
- }
- </pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- </pre></pre></pre>