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映射文件中需要注意的问题:


浙公网安备 33010602011771号