Spring集成myBatis操作数据库

学习来源:  http://www.cnblogs.com/lhw1994/p/6759815.html

1. mybatis介绍

这是一个半自动化的框架,何谓半自动,因为它需要手工编写POJO、SQL和映射关系。虽然要多花点时间编写SQL语句,但至少在优化方面可以省心不少。

2. Spring与myBatis的结合

2.1 基础配置文件  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>
  <properties>
  <!-- 配置数据库方言 目前只有mysql和oracle两种-->
  <property name="dialect" value="mysql" />
  </properties>

  <settings>
    <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
    <setting name="useGeneratedKeys" value="true" />

    <!-- 使用列别名替换列名 默认:true -->
    <setting name="useColumnLabel" value="true" />

    <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>

    <!-- 启用或禁用 缓存 -->
    <setting name="cacheEnabled" value="true" />

    <!-- 启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载 -->
    <!-- <setting name="lazyLoadingEnabled" value="true" /> -->
  </settings>

  <!--
    设置别名
    通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度。类型别名标签typeAliases中可以包含多个typeAlias
  -->
  <typeAliases>
    <typeAlias alias="user" type="com.lhw.test.user.entity.User" />
  </typeAliases>

  <!-- 引入映射文件 -->
  <mappers>
    <!-- start base config -->
    <mapper resource="user/user.mapper.xml" />
  </mappers>
</configuration>

2.2 Spring的配置文件   applicationContext-dao.xml

<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
  <!-- 开启注解扫描 -->
  <context:annotation-config />
  <context:component-scan base-package="com.lhw.*" />
  <!-- jdbc.properties文件路径 -->
  <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true" />

  <!-- 系统日志初始化配置类 -->
  <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
    <property name="targetMethod" value="initLogging" />
    <property name="arguments">
      <list>
        <value>classpath:log4j.xml</value>
      </list>
    </property>
  </bean>

  <!-- 数据库日志初始化配置类 -->
  <bean id="log4jdbcInterceptor" class="net.sf.log4jdbc.DataSourceSpyInterceptor" />
  <bean id="dataSourceLog4jdbcAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="interceptorNames">
      <list>
        <value>log4jdbcInterceptor</value>
      </list>
    </property>
    <property name="beanNames">
      <list>
        <value>dataSource</value>
      </list>
    </property>
  </bean>

  <!-- 数据源的配置 -->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <!-- 设置连接池初始值 -->
    <property name="initialSize" value="1" />
    <!-- 设置连接池最大值 -->
    <property name="maxActive" value="2" />
    <!-- 设置连接池最大空闲值 -->
    <property name="maxIdle" value="2" />
    <!-- 设置连接池最小空闲值 -->
    <property name="minIdle" value="1" />

    <!--removeAbandoned: 是否自动回收超时连接-->
    <property name="removeAbandoned" value="true"/>
    <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
    <property name="removeAbandonedTimeout" value="180"/>
    <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->
    <property name="maxWait" value="3000"/>
    <!-- SQL查询,用来验证从连接池取出的连接 -->
    <property name="validationQuery" value="SELECT 1" />
    <property name="testOnBorrow" value="true" />
    <!-- 指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除 -->
    <property name="testWhileIdle" value="true" />
    <!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好和maxActive一致 -->
    <property name="numTestsPerEvictionRun" value="2"/>
    <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <!-- 连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />
  </bean>

  <!-- MyBatis sqlSessionFactory 配置 mybatis -->
  <bean name="sqlSessionFactory" id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:config/mybatis_config.xml" />
    <property name="dataSource" ref="dataSource" />
  </bean>
  <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
  </bean>

  <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sqlSessionFactory"/>
  </bean>
  <!-- 基于接口方式 -->
  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    <property name="basePackage" value="com.lhw.test.service"></property>
    <property name="annotationClass" value="org.springframework.stereotype.Repository"></property>
  </bean>
  <!-- 事务控制 -->
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="globalRollbackOnParticipationFailure" value="false"></property>
    <property name="dataSource" ref="dataSource" />
  </bean>

  <tx:annotation-driven transaction-manager="transactionManager"/>
  <aop:aspectj-autoproxy proxy-target-class="true" />   

  <tx:advice id="txAdvice" transaction-manager="transactionManager">   

    <tx:attributes>

      <tx:method name="get*" read-only="true" />
      <tx:method name="query*" read-only="true" />
      <tx:method name="save*" read-only="true" />

      <tx:method name="update*" read-only="true" />

      <tx:method name="del*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />

      <tx:method name="remove*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
      <tx:method name="update*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
      <tx:method name="modfiy*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
      <tx:method name="add*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
      <tx:method name="create*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
      <tx:method name="insert*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
      <tx:method name="*" read-only="false" rollback-for="Exception" propagation="REQUIRED" />
     </tx:attributes>
   </tx:advice>
  <aop:config>
    <aop:pointcut id="serviceOperation" expression="execution(* com.lhw.test..service..*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
  </aop:config>
</beans>

2.3 JDBC的配置文件   jdbc.properties

#jdbc settings
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true
jdbc.username=root
jdbc.password=root

2.4 映射文件   user.mapper.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" >
   <!--

    如果POJO的属性名与数据库中表中列名映射一致,也可不写,或是通过在POJO中通过@Column(name = "")将数据库字段注解到POJO属性或方法上保持一致性也可

    -->
  <resultMap id="userMap" type="user" >
    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="password" property="password" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="sex" property="sex" jdbcType="INTEGER" />
    <result column="email" property="email" jdbcType="VARCHAR" />
    <result column="tel" property="tel" jdbcType="VARCHAR" />
  </resultMap>

  <sql id="Base_Column_List" >
    id,username,password,name,sex,email.tel
  </sql>

  <!-- 根据id查询 -->
  <select id="queryById" resultMap="userMap" parameterType="java.lang.Long" >
    select
    <include refid="Base_Column_List" />
    from b_user where id = #{id,jdbcType=BIGINT}
  </select>

  <!-- 查询所有 -->
  <select id="queryAll" resultMap="userMap">
    select
    <include refid="Base_Column_List" />
    from tb_user where 1 = 1
  </select>
</mapper>

2.5 DAO,BaseMybatisDao.java

/**
*
* @description:获取sqlSessionTemplate
*
* @author: liuhongwei
*/
public class BaseMybatisDao {
  @Resource
  public SqlSession sqlSessionTemplate;
}

sqlSessionTemplate是Spring提供的操作模板。

2.6 CRUD测试,继承DAO,userDAO.java

/**
*
* @description: 用户类数据库操作
*
* @author: liuhongwei
*/
@Repository("userDao")
public class UserDao extends BaseMybatisDao {

  /**
  * 根据id查询用户信息
  * @param id
  * @return
  */
  @Override
  public Email queryById(Integer id) {
    return sqlSessionTemplate.selectOne("userMapper.queryById",id);
  }

  /**
  * 查询所有
  * @return
  */
  @Override
  public List<User> queryAll() {
    return sqlSessionTemplate.selectList("userMapper.queryAll");
  }
时间: 2024-10-08 13:28:26

Spring集成myBatis操作数据库的相关文章

Mybatis-Generator插件的使用与Spring集成Mybatis的配置

Mybatis-Generator插件 Mybatis-Generator是一个用于自动生成dao层接口.pojo以及mapper xml的一个Mybatis插件,该插件有三种用法:命令行运行.Eclipse插件.maven插件.个人觉得maven插件最方便,可以在eclipse/intellij idea等ide上通用,本文也是介绍在maven中配置并使用这个插件. 现在我mysql中有一个school数据库,该数据库有student.cls两张表格,表结构如下: student表: cls表

Spring集成MyBatis的使用-使用Mapper映射器

Spring集成MyBatis使用 前面复习MyBatis时,发现在测试时,需要手动创建sqlSessionFactory,Spring将帮忙自动创建sqlSessionFactory,并且将自动扫描Mapper映射器 (1)集成步骤 step1 导包: spring-webmvc, mybatis, mybatis-spring, dbcp, ojdbc, spring-jdbc, junit, mysql相关等 <dependencies> <!--导入junit测试包-->

Spring集成MyBatis的使用-使用SqlSessionTemplate

Spring集成MyBatis的使用 Spring集成MyBatis,早期是使用SqlSessionTemplate,当时并没有用Mapper映射器,既然是早期,当然跟使用Mapper映射器是存在一些区别的,比如映射文件命名空间不需要跟接口名一样,接口中的方法不一定跟sql的id一样,通过它的SqlSessionTemplate的使用,在具体实现类中可以实现找到对应的sql Spring-Mybatis集成方式二-使用SqlSessionTemplate step1 导包:spring-webm

Spring集成MyBatis框架

Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错:另一个是,复杂的SQL用字符串写起来简直不可维护(换行.可视长度.参数都是问题). 2.使用Spring JdbcTemplate 这个其实还是挺不错的,配置比较简单,功能丰富上比手工管理Connection要舒服多了,而且代码也比较简洁.

Unit08: Spring集成mybatis

Unit08: Spring集成mybatis 1. Spring集成mybatis (1)方式一 step1. 导包. spring-webmvc,mybatis,mybatis-spring, ojdbc,dbcp,spring-jdbc,junit. step2. 添加spring的配置文件. 注:集成之后,不再需要mybatis的配置文件了,之前的配置信息 用一个bean(SqlSessionFactoryBean)来代替. step3.实体类. step4.映射文件. step5.Ma

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/sch

Spring集成MyBatis完整示例

为了梳理前面学习的<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>中的内容,准备做一个完整的示例完成一个简单的图书管理功能,主要使用到的技术包含Spring.MyBatis.Maven与MySQL等.最后的运行效果如下: 项目结构如下: 一.新建一个基于Maven的Web项目 1.1.创建一个简单的Maven项目,项目信息如下: 1.2.修改层面信息,在项目上右键选择属性,再选择“Project Face

Spring集成Mybatis

jar文件下载地址:http://download.csdn.net/detail/huhui_bj/8575533 一.准备jar包 [mybatis] mybatis-3.2.0.jar mybatis-spring-1.1.1.jar log4j-1.2.17.jar [spring] spring-aop-3.2.0.RELEASE.jar spring-beans-3.2.0.RELEASE.jar spring-context-3.2.0.RELEASE.jar spring-cor

Spring Boot(六)集成 MyBatis 操作 MySQL 8

一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集. 1.2 MyBatis发展史 MyBatis 原本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis ,2013年11月迁移到Github. ### 1.3 MyBatis和H