springMVC整合Mybatis

不前序了,直接上干货

1、先看一下applicationContext.xml文件配置(src目录下)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xmlns:tx="http://www.springframework.org/schema/tx"
 6     xmlns:context="http://www.springframework.org/schema/context"
 7     xsi:schemaLocation="
 8         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
10         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
11         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
12     <!-- 配置数据源 -->
13     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
14         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
15         <property name="url" value="jdbc:mysql://localhost:3306/863pro"/>
16         <property name="username" value="root"/>
17         <property name="password" value="123456"/>
18     </bean>
19     
20     <!-- 声明式事务配置 开始 -->
21     <!-- 配置事务管理器 -->
22     <!-- <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
23         <property name="dataSource" ref="dataSource"/>
24     </bean> -->
25     <!-- 配置事务通知 -->
26     <!-- <tx:advice id="txAdvice" transaction-manager="txManager">
27         <tx:attributes>
28             配置哪些方法使用什么样的事务,配置事务的传播特性
29             <tx:method name="add" propagation="REQUIRED"/>
30             <tx:method name="insert" propagation="REQUIRED"/>
31             <tx:method name="update" propagation="REQUIRED"/>
32             <tx:method name="delete" propagation="REQUIRED"/>
33             <tx:method name="remove*" propagation="REQUIRED"/>
34             <tx:method name="get" read-only="true"/>
35             <tx:method name="*" propagation="REQUIRED"/>
36         </tx:attributes>
37     </tx:advice>
38     <aop:config> 
39         <aop:pointcut expression="execution(* com.test.dao.impl.*.*(..))" id="pointcut"/>
40         <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
41     </aop:config> -->
42     <!-- 声明式事务配置 结束 -->
43     
44     <!-- 配置sqlSessionFactory -->
45     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
46         <property name="dataSource" ref="dataSource"/>
47         <property name="configLocation" value="classpath:mybatis.cfg.xml"></property>
48     </bean>
49     
50     <context:component-scan base-package="com.test" />
51 
52 </beans>

  中间注释掉的一大部分是事务管理的配置,实际的项目中是必不可少的,我没有用到,就注释掉了,感兴趣可以照着这个写,是正确的。要使用事务管理,需要在开头引入4、5、9、10这四行就OK了。

  最下边一行<context:component-scan base-package="com.test" />是spring提供的自动装配配置,如在本例中当做装配时,就会到com/test下搜索所有子目录,并找出符合条件的dao文件。

  配置数据源是链接数据库的配置,直接复制就ok,最下边的sqlSessionFactory配置是配置数据源,其中

 <property name="configLocation" value="classpath:mybatis.cfg.xml"></property>

是配置mybatis的重要配置,这个applicationContext.xml放在src目录下就ok。
2、mybatis.cfg.xml配置(src目录下,也就是和applicationContext.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>
        <package name="com.test.vo"/>
    </typeAliases>
    
    <mappers>
        <mapper resource="com/test/vo/user.mapper.xml"/>
    </mappers> 
</configuration>

  其中<package name="com.test.vo"/>是model所在的文件位置(比如你定义了User),<mapper resource="com/test/vo/user.mapper.xml"/>是user.mapper.xml文件位置,这个xml文件是直接对数据库文件进行配置的,下面会说到。整合mybatis必须要配置这个mybatis.cfg.xml文件,并导入相关jar包(后面会有)。

3、user.mapper.xml文件(com.test.vo,和model同级) 

<?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="com.test.vo.user.mapper">
    <select id="select" resultType="RelatedId">
        select boot_id,action_id,action_type,allowed,sender_id,sender_type,sender_attr,receiver_id,receiver_type,receiver_attr from program_log where id=#{id}
    </select>
    
    <insert id="add" parameterType="RelatedId" useGeneratedKeys="true">
        insert into test_program_log(time,machine_id,boot_id,action_id,action_type,allowed,sender_id,sender_type,sender_attr,receiver_id,receiver_type,receiver_attr) values(#{beginTime},#{machine_id},#{boot_id},#{action_id},#{action_type},#{allowed},#{sender_id},#{sender_type},#{sender_attr},#{receiver_id},#{receiver_type},#{receiver_attr})
    </insert>
    
    <resultMap type="LabelDB" id="getLabelDB">  
        <!-- 主键必须用id标签映射,其他的用非集合用result映射 集合类用collection映射 -->  
        <!-- column为数据库字段名,property为实体类属性名 -->   

           <result column="id" property="sid" />
        <result column="time" property="updateTime" /> 
        <result column="machine_id" property="machine_id" />      
    </resultMap>
    
    <select id="label_select" resultMap="getLabelDB">
        select id,time,machine_id from test_program_log where id=#{id} 
    </select>
    
    <insert id="label_add" parameterType="LabelDB" useGeneratedKeys="true">
        insert into label_db(time,sid,machine_id,sys_label,net_label) values(#{updateTime},#{sid},#{machine_id},#{sys_label},#{net_label})
    </insert>
</mapper>

  这个配置很清楚,<select>下就是做查询,<insert>下就是做插入等等,其中的id很重要,调用某一条数据库语句都是通过id,而在select中的resultType属性是返回类型,会自动同名赋值,如果model变量名与数据库字段不同,就用<resultMap>配置。

4、在com.test.dao.impl中的实现

package com.test.dao.impl;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.test.dao.RelatedIdDao;
import com.test.vo.LabelDB;
import com.test.vo.RelatedId;

@Repository("relatedIdDao")
public class RelatedIdDaoImpl extends SqlSessionDaoSupport implements RelatedIdDao {
    
    @Autowired
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        super.setSqlSessionFactory(sqlSessionFactory);
    }
    @Override
    public RelatedId selectRelatedId(int id) {
        RelatedId relatedId = new RelatedId();        
        relatedId = (RelatedId)this.getSqlSession().selectOne("com.test.vo.user.mapper.select", id);
        return relatedId;
    }
    
    @Override
    public LabelDB selectLabelDB(int id) {
        LabelDB labelDB = new LabelDB();
        labelDB = (LabelDB)this.getSqlSession().selectOne("com.test.vo.user.mapper.label_select", id);
        return labelDB;
    }

    @Override
    public void insertLog(RelatedId relatedId) {
        this.getSqlSession().insert("com.test.vo.user.mapper.add", relatedId);
    }
}

通过如图的this.getSqlSession.*这个语句就可以做相关的调用了,而前面的注解@Repository("relatedIdDao")就是自动装配的注解 @Autowired是自动装配时候所找的函数位置,而setSqlSessionFactory(SqlSessionFactory sqlSessionFactory)这个函数是必要的。

最后是相关jar包,这个jar包数量可能比需要的多,因为这是后来整理的。

aopalliance.jar
asm-3.3.1.jar
aspectjweaver.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mybatis-spring-1.2.1.jar
mysql-connector-java-5.1.20-bin.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-context-support-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-jdbc-4.1.6.RELEASE.jar
spring-orm-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar

大功告成!!!

  

posted @ 2017-04-27 22:03  K_artorias  阅读(291)  评论(0编辑  收藏  举报