您的位置:首页 > 编程语言 > Java开发

Mybatis笔记之四 -- mybatis与spring整合简单例子

2014-07-28 00:05 567 查看
1、导入开发所需要的jar包




2、配置spring配置文件beans.xml

配置数据源,bean等信息

<?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.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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>

<bean id="sf" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--  将mybatis的配置文件引入  -->
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
<property name="mapperLocations">//mybatis的映射文件导入,则不需要再sqlMapConfig.xml中在导入
<value>classpath:cn/mybatis/domain/User.xml</value>
</property>
</bean>

<bean id="userDao" class="cn.mybatis.dao.UserDaoImpl">
<property name="sqlSessionFactory" ref="sf"></property>
</bean>

<!-- ================================事务相关控制=================================================    -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

<tx:advice id="userTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 有事务就不用开启事务,没有就单独开启事务 -->
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="select*" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="pc" expression="execution(* cn.mybatis.service.*.*(..))" />
<!--把事务控制在Service层-->
<aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" />
</aop:config>

<bean id="userService" class="cn.mybatis.service.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>

</beans>
3、配置mybatis的配置文件sqlMapConfig.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 type="cn.mybatis.domain.User" alias="User"/>
</typeAliases>

<mappers>
<mapper resource="cn/mybatis/domain/User.xml"/>
</mappers>
</configuration>

4、实体类与映射文件user.xml

package cn.mybatis.domain;

public class User {

private String id;
private String name;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
System.out.println("利用set方法设置id");
this.id = id;
}
public String getName() {
System.out.println("调用get方法获取Name");
return name;
}
public void setName(String name) {
System.out.println("利用set方法设置name");
this.name = name;
}
public String getAddress() {
System.out.println("调用get方法获取Address");
return address;
}
public void setAddress(String address) {
System.out.println("利用set方法设置ddres");
this.address = address;
}
@Override
public String toString() {

return "id = "+id+"name = "+ name +" address" + address;
}

}
映射文件
<?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="cn.mybatis.domain.User">

<!-- 根据id查询 user-->
<select id="selectUserById" parameterType="string" resultType="cn.mybatis.domain.User">
select * from user where id = #{id}
<!--  #{id} 中的参数可以随便写,因为是传进来的,在这里起到的是占位的作用-->
</select>

<!-- 查询所有的user -->
<select id="selectAllUser" resultType="cn.mybatis.domain.User">
select id,name,address from user
</select>

<!-- 根据id查询 user-->
<select id="serlectUserByIdForMap" parameterType="string" resultType="hashmap">
select id,name,address from user where id = #{id}
</select>

<!-- 插入User 参数为hashmap-->
<insert id="inserUserForMap" parameterType="hashmap">
insert into user(id,name,address) values(#{id},#{name},#{address})
</insert>

<!-- 插入user -->
<insert id="insertUser" parameterType="cn.mybatis.domain.User">
insert into user(id,name,address) values(#{id},#{name},#{address})
<!-- 其中vlaues(#{id},#{name},#{address}中的参数不可以随便写,必须有对应的get方法,因为是通过反射注入进来的 -->
</insert>

<!-- 根据id删除user -->
<delete id="deleteUserById" parameterType="string">
delete from user where id = #{id}
</delete>

<!-- 根据id更新user -->
<update id="updateUserById" parameterType="cn.mybatis.domain.User">
update user set name = #{name}, address = #{address} where id =  #{id}
</update>

<!-- 根据id更新user 更新参数为Map-->
<update id="updateUserByIdForMap" parameterType="hashmap">
update user set name = #{name}, address = #{address} where id =  #{id}
</update>

<!-- 动态sql -->
<select id="selectUserByCondition" parameterType="cn.mybatis.domain.User" resultType="cn.mybatis.domain.User">
select id,name,address from user where 1=1
<if test="id != null">
and id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="name != null">
and name = #{name}
</if>
<if test="address != null">
and address = #{address}
</if>
</select>

<!-- 动态sql -->
<select id="selectUserByCondition2" parameterType="cn.mybatis.domain.User" resultType="cn.mybatis.domain.User">
select id,name,address from user
<where>
<if test="id != null">
id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="name != null">
and name = #{name}
</if>
<if test="address != null">
and address = #{address}
</if>
</where>
</select>

<!-- 动态更新user -->
<update id="updateUserByCondition" parameterType="User">
update user
<set>
<if test="name != null">
name = #{name},
</if>
<if test="address != null">
address = #{address}
</if>
</set>
where id = #{id}
</update>

</mapper>


5、dao层

package cn.mybatis.dao;

import java.util.List;

import cn.mybatis.domain.User;

public interface UserDao {

//根据id查询User
public User findUserById(String id);

//查询所有User
public List<User> findAllUser();

//动态sql查询User

public List<User> findUserByIdCondition(User user);

//根据id删除User
public int deleteUserById(String id);

//添加User
public int insertUser(User user);

//更新User
public int updateUserById(User user);

public int updateUser(User user);

}

dao实现

package cn.mybatis.dao.impl;

import java.util.List;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import cn.mybatis.domain.User;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{

//根据id查询User
@Override
public User findUserById(String id) {
return (User) this.getSqlSession().selectOne("cn.mybatis.domain.User.selectUserById", id);
}

//根据id删除User
@Override
public int deleteUserById(String id) {
int i = this.getSqlSession().delete("cn.mybatis.domain.User.deleteUserById", id);
return i;
}

//查询所有User
@Override
public List<User> findAllUser() {

return this.getSqlSession().selectList("cn.mybatis.domain.User.selectAllUser");
}

//动态sql查询所有User
@Override
public List<User> findUserByIdCondition(User user) {
return this.getSqlSession().selectList("cn.mybatis.domain.User.selectUserByCondition", user);
}

//添加User
@Override
public int insertUser(User user) {
return this.getSqlSession().insert("cn.mybatis.domain.User.insertUser", user);
}

//更新User
@Override
public int updateUser(User user) {
int i = this.getSqlSession().update("cn.mybatis.domain.User.updateUserByCondition", user);
return i;
}

@Override
public int updateUserById(User user) {
int i = this.getSqlSession().update("cn.mybatis.domain.User.updateUserById", user);
return i;
}
}

6、业务层service

一般方法都与dao层相对应

package cn.mybatis.service;

import java.util.List;

import cn.mybatis.domain.User;

public interface UserService {
//根据id查询User
public User findUserById(String id);

//查询所有User
public List<User> findAllUser();

//动态sql查询User

public List<User> findUserByIdCondition(User user);

//根据id删除User
public int deleteUserById(String id);

//添加User
public int insertUser(User user);

//更新User
public int updateUserById(User user);

public int updateUser(User user);

}

实现

package cn.mybatis.service;

import java.util.List;

import cn.mybatis.dao.UserDao;
import cn.mybatis.domain.User;

public class UserServiceImpl implements UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

@Override
public int deleteUserById(String id) {
int i = userDao.deleteUserById(id);
return i;
}

@Override
public List<User> findAllUser() {
return userDao.findAllUser();
}

@Override
public User findUserById(String id) {
return userDao.findUserById(id);
}

@Override
public List<User> findUserByIdCondition(User user) {
return userDao.findUserByIdCondition(user);
}

@Override
public int insertUser(User user) {
int i = userDao.insertUser(user);
return i;
}

@Override
public int updateUser(User user) {
int i = userDao.updateUser(user);
return i;
}

@Override
public int updateUserById(User user) {
int i = userDao.updateUserById(user);
return i;
}

}


7、利用单元测试进行测试

package cn.mybatis.test;

import java.util.List;

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

import cn.mybatis.dao.UserDao.impl;
import cn.itcast.mybatis.domain.User;
import cn.itcast.mybatis.service.UserService.impl;

public class MyBatisTest {

@Test
public void findUserByIdTest()throws Exception{
//加载配置文件
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");

UserDao userDao = (UserDao) ct.getBean("userDao");
User u = userDao.findUserById("001");
System.out.println(u);

}

//根据id删除User
@Test
public void deleteUserByIdTest()throws Exception{
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");

UserDao userDao = (UserDao) ct.getBean("userDao");
int i = userDao.deleteUserById("04");
System.out.println("影响的条数: " + i);
}

//查询所有User

@Test
public void findAllUserTest()throws Exception{
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");

UserDao userDao = (UserDao) ct.getBean("userDao");
//查询出所有的User返回的为list集合
List<User> usersList = userDao.findAllUser();

for(User user: usersList){
System.out.println(user);
}
}

//动态sql查询所有User
@Test
public void selectUserByConditionTest()throws Exception{
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");
UserDao userDao = (UserDao) ct.getBean("userDao");

User user = new User();
user.setId("002");

List<User> userList = userDao.findUserByIdCondition(user);
for(User u:userList){
System.out.println(u);
}
}

//添加User
@Test
public void insertUserTest()throws Exception{
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");
UserDao userDao = (UserDao) ct.getBean("userDao");

User user = new User();
user.setId("007");
user.setName("测试007");
user.setAddress("测试地址007");

int i = userDao.insertUser(user);

System.out.println("影响的条数: " + i);
}
//更新User
@Test
public void updateUserByIdTest()throws Exception{
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");

UserDao userDao = (UserDao) ct.getBean("userDao");
User user = new User();
user.setId("01");
user.setName("更新后的001");
user.setAddress("更新后的001地址");

int i = userDao.updateUserById(user);
System.out.println("影响的条数: " + i);
}

@Test
public void updateUserByIdForMapTest()throws Exception{
ApplicationContext ct = new ClassPathXmlApplicationContext("beans.xml");

UserDao userDao = (UserDao) ct.getBean("userDao");
User user = new User();
user.setId("03");
user.setName("更新后的000");
user.setAddress("更新后的地址000");

int i = userDao.updateUser(user);
System.out.println("影响的条数: " + i);
}

@Test
public void transactionTest(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = (UserService) ctx.getBean("userService");
int i = userService.deleteUserById("001");
System.out.println("影响的条数: " + i);

}

数据库表结构:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: