spring-mybatis整合具体步骤:

1、新建Web项目

2、导入相应的架包

  1)mybatis:mybatis架包

  2)oracle-jdbc:连接oracle数据库的jdbc架包

  3)pool-dbcp:dbcp连接池的架包,dataSource

  4)spring-core:spring的核心架包

  5)spring-aop:面向切面编程

  6)mybatis-spring:整合的架包

  7)JUint4:单元测试的架包

  8)spring-tx :spring提供的事务控制

3、创建项目的包结构

  1)dao:dao层

  2)entity:实体层

  3)service:逻辑业务层

  4)action:控制层

  5)mapper:mybatis映射文件包,保存的是 ..mapping.xml文件,一个文件对应一个 dao接口;mapping文件和 接口名要一致;mapping文件的名称空间要和 接口的包名+类名一致;mapping文件中的SQL标签的id要与 接口中的方法名一致

  6)config:放db.properities 配置文件、mybatis.xml、spring-mybatis.xml

  7)test:测试包

4、编写代码

  (1) 在config包中

    1) db.properties

    2) mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- .DTD文件是xml格式文件的约束文件,它约束了该xml文件使用的标签以及标签之间的关系 -->
 3 <!DOCTYPE configuration
 4     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 5     "http://mybatis.org/dtd/mybatis-3-config.dtd"
 6 >
 7 
 8 <configuration>
 9     <!-- 配置 -->
10      <settings>
11          <!-- 默认mybatis3 传入null值,会报错
12         设置:当传入null值的时候,字段值 使用 null 来代替-->
13          <setting name="jdbcTypeForNull" value="NULL"/>
14          <setting name="logImpl" value="LOG4J" />
15      </settings>
16       
17      <!-- 自定义别名 -->
18      <typeAliases>
19         <package name="com.nov.entity"/>         
20      </typeAliases>
21 
22     <!-- 导入mapper文件 -->
23      <mappers>        
24      </mappers>
25 </configuration>

    3) spring-mybatis.xml

 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:context="http://www.springframework.org/schema/context"
 5     xmlns:aop="http://www.springframework.org/schema/aop"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="  
 8         http://www.springframework.org/schema/beans
 9         http://www.springframework.org/schema/beans/spring-beans.xsd
10         http://www.springframework.org/schema/context
11         http://www.springframework.org/schema/context/spring-context.xsd
12         http://www.springframework.org/schema/aop
13         http://www.springframework.org/schema/aop/spring-aop.xsd
14         http://www.springframework.org/schema/tx
15         http://www.springframework.org/schema/tx/spring-tx.xsd
16         "
17         >
18        
19        <!-- 加载数据库连接信息 -->
20        <context:property-placeholder location="classpath:config/db.properties"/>
21         
22         <!-- 创建数据库源 使用dbcp连接池 -->
23         <bean id="dataSource" 
24               class="org.apache.commons.dbcp.BasicDataSource"
25               destroy-method="close"
26               >
27               <property name="driverClassName" value="${jdbc.drivername}"></property>
28               <property name="url" value="${jdbc.url}"></property>
29               <property name="username" value="${jdbc.username}"></property>
30               <property name="password" value="${jdbc.password}"></property>
31         </bean>
32         
33         <!-- sqlSessionFactory 整合spring后。交给spring的ioc容器 实例化对象 -->
34         <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
35             <!-- 加载mybatis配置文件 -->
36             <property name="configLocation" value="classpath:config/mybatis.xml"></property>
37             <!-- 数据源 -->
38             <property name="dataSource" ref="dataSource"></property>
39             <!-- 指定xml映射文件的包  帮助加载指定包下的所有xml文件 -->
40             <property name="mapperLocations" value="classpath:com/nov/mapper/*.xml"></property>
41         </bean>
42         
43         
44         <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
45             <property name="basePackage" value="com.nov.dao"></property>
46             <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
47         </bean>
48         
49         <!-- 注解扫描 @Controller @Service -->
50        
51        <context:component-scan base-package="com.nov"></context:component-scan>
52         
53         
54         
55 </beans>

  (2)在entity包中:User.java

 1 package com.nov.entity;
 2 
 3 import java.sql.Date;
 4 
 5 public class User {
 6     private int id;
 7     private String username;
 8     private String gender;
 9     private Date birthday;
10     private String address;
11     public User() {
12         super();
13     }
14     public User(int id, String username, String gender, Date birthday,
15             String address) {
16         super();
17         this.id = id;
18         this.username = username;
19         this.gender = gender;
20         this.birthday = birthday;
21         this.address = address;
22     }
23     public int getId() {
24         return id;
25     }
26     public void setId(int id) {
27         this.id = id;
28     }
29     public String getUsername() {
30         return username;
31     }
32     public void setUsername(String username) {
33         this.username = username;
34     }
35     public String getGender() {
36         return gender;
37     }
38     public void setGender(String gender) {
39         this.gender = gender;
40     }
41     public Date getBirthday() {
42         return birthday;
43     }
44     public void setBirthday(Date birthday) {
45         this.birthday = birthday;
46     }
47     public String getAddress() {
48         return address;
49     }
50     public void setAddress(String address) {
51         this.address = address;
52     }
53     @Override
54     public String toString() {
55         return "User [id=" + id + ", username=" + username + ", gender="
56                 + gender + ", birthday=" + birthday + ", address=" + address
57                 + "]";
58     }
59     
60     
61 
62 }

  (3) 在dao层中写接口UserMapper.java:写一个保存的方法

 1 package com.nov.dao;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 import com.nov.entity.User;
 6 
 7 public interface UserMapper {
 8 
 9     int save(User user);
10     
11 }

  (4) 在service层中:

   --IUserService接口

 1 package com.nov.service;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 import com.nov.entity.User;
 7 
 8 public interface IUserService {
 9     
10     int save(User user);
11 
12 }

  --UserServiceImpl实现类

 1 package com.nov.service;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 import javax.annotation.Resource;
 7 
 8 import org.springframework.stereotype.Service;
 9 import org.springframework.transaction.annotation.Propagation;
10 import org.springframework.transaction.annotation.Transactional;
11 
12 import com.nov.dao.UserMapper;
13 import com.nov.entity.User;
14 
15 @Service("userService")
16 public class UserServiceImpl implements IUserService{
17     
18     //维护一个dao接口的动态实现
19     @Resource
20     private UserMapper userMapper;
21     @Transactional(
22             readOnly=false,
23             propagation=Propagation.REQUIRED,
24             timeout=-1
25             )
26 
27     @Override
28     public int save(User user) {
29         int row = userMapper.save(user);
30         
31         return row;
32     }
33 
34 
35 }

  (5)mapper包中:UserMapper.xml映射文件(注意,一个映射文件对于一个dao接口,UserMapper.xml必须与UserMapper.java命名一样)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!-- namespace用于区分 sql标签 ,一般为了保证唯一,namespace表示为 包名+xml文件名 -->
 6 
 7 <mapper namespace="com.nov.dao.UserMapper">
 8     <insert id="save" parameterType="user">
 9         insert into User1 values(seq_temp.nextval,#{username},#{gender},#{birthday},#{address})
10     </insert>
11 
12 </mapper>

  (6)action包中:UserAction.java

 1 package com.nov.action;
 2 
 3 import java.sql.Date;
 4 
 5 import javax.annotation.Resource;
 6 
 7 import org.springframework.stereotype.Controller;
 8 
 9 import com.nov.entity.User;
10 import com.nov.service.IUserService;
11 
12 @Controller
13 public class UserAction {
14     
15     //维护一个service
16     @Resource
17     private IUserService userService;
18     
19     public String execute(){
20         User user = new User(0, "娃仔", "女",new Date(1234L), "上海");
21         int row = userService.save(user);
22         System.out.println("受影响的行数:"+row);
23         return "success";        
24     }
25 
26 }

  (7) test包中:UserTest

package com.nov.test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.nov.action.UserAction;

public class AppTest {
    
    @Test
    public void testApp(){
        ClassPathXmlApplicationContext ca = new ClassPathXmlApplicationContext("config/spring-mybatis.xml");
        UserAction action =  (UserAction) ca.getBean("userAction");
        action.execute();
    }

}

  (8)执行

 

   出现绿色杠杠就是正确的

 

  控制台打印出受影响的行数

 

spring-mybatis.xml映射文件中需要注意的问题:

 

 

 

 

 

 

 

 

 

  

posted on 2018-11-10 21:05  雙雁的故事  阅读(227)  评论(0)    收藏  举报