mybatis与spring整合
导包
首先导入mybatis和spring所需要的jar包
spring配置文件
配置spring配置文件
测试一下是否配置成功:
编写实体类User
public class User {
private String id;
private String userName;
private String address;
public String getId() {
System.out.println("正在通过getId方法获取id的值:" + id);
return id;
}
public void setId(String id) {
System.out.println("正在通过setId方法注入id的值:" + id);
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
System.out.println("正在通过setAddress方法注入address的值:" + address);
this.address = address;
}
@Override
public String toString() {
return "{id:" + id + ",name:" + userName + ",address:" + address + "}";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
System.out.println("正在通过setUserName方法注入userName的值:" + userName);
this.userName = userName;
}
}
编写映射文件User.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="com.cc.mybatis.domain.User">
<resultMap type="User" id="userMap">
<id column="id" property="id"/>
<result column="name" property="userName"/>
<result column="address" property="address"/>
</resultMap>
<sql id="mysql">
id,name,address
</sql>
<!-- 根据id查询User -->
<!-- id:当前sql语句的唯一标示 parameterType:参数类型 resultType:结果类型(返回值类型)-->
<select id="selectUserById" parameterType="string" resultMap="userMap">
select <include refid="mysql"/> from user where id = #{userid}
</select>
<!-- 查询所有User -->
<select id="selectAllUsers" resultType="User">
select id,name as userName ,address from user
</select>
<!-- 根据id查询User,返回值为:Map -->
<select id="selectUserByIdForMap" parameterType="string" resultType="hashmap">
select id,name,address from user where id = #{userid}
</select>
<!-- 动态sql -->
<select id="selectUserByCondition" parameterType="User" resultType="User">
select id,name as userName ,address from user where 1=1
<if test="id != null">
and id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="userName != null">
and name = #{userName}
</if>
<if test="address != null">
and address = #{address}
</if>
</select>
<!-- 动态sql -->
<select id="selectUserByCondition2" parameterType="User" resultType="User">
select id,name as userName ,address from user
<where>
<if test="id != null">
id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="userName != null">
and name = #{userName}
</if>
<if test="address != null">
and address = #{address}
</if>
</where>
</select>
<!-- 插入User -->
<insert id="insertUser" parameterType="User">
insert into user (id,name,address) values (#{id},#{userName},#{address});
</insert>
<!-- 插入User 参数为hashmap-->
<insert id="insertUserForMap" parameterType="hashmap">
insert into user (id,name,address) values (#{id},#{name},#{address});
</insert>
<!-- 根据id删除User -->
<delete id="deleteUserById" parameterType="string">
delete from user where id = #{id}
</delete>
<!-- 根据id更新User -->
<update id="updateUserById" parameterType="User">
update user set name = #{userName},address = #{address} where id = #{id}
</update>
<!-- 动态更新user -->
<update id="updateUserByCondition" parameterType="User">
update user
<set>
<if test="userName != null">
name = #{userName},
</if>
<if test="address != null">
address = #{address}
</if>
</set>
where id = #{id}
</update>
<!-- 根据id更新User 参数为map-->
<update id="updateUserByIdForMap" parameterType="hashmap">
update user set name = #{userName},address = #{address} where id = #{id}
</update>
</mapper>
加入映射文件
spring中引入mybatis的配置文件
上面加入的映射文件也可以不在sqlMapConfig.xml中书写,可以写在spring的配置文件中,如下:
加入Dao层和Service层实体类
public interface IUserDao {
public User findUserById(String id);
public List<User> findAllUser();
public List<User> findUserByCondition(User u);
public int deleteUserById(String id);
public int saveUser(User u);
public int updateUserById(User u);
public int updateUser(User u);
}
public class UserDaoImpl extends SqlSessionDaoSupport implements IUserDao {
public User findUserById(String id) {
return (User) this.getSqlSession().selectOne("com.cc.mybatis.domain.User.selectUserById", id);
}
public int deleteUserById(String id) {
int i = this.getSqlSession().delete("com.cc.mybatis.domain.User.deleteUserById", id);
return i;
}
public List<User> findAllUser() {
return this.getSqlSession().selectList("com.cc.mybatis.domain.User.selectAllUsers");
}
public List<User> findUserByCondition(User u) {
return this.getSqlSession().selectList("com.cc.mybatis.domain.User.selectUserByCondition", u);
}
public int saveUser(User u) {
int i = this.getSqlSession().insert("com.cc.mybatis.domain.User.insertUser", u);
return i;
}
public int updateUserById(User u) {
int i = this.getSqlSession().update("com.cc.mybatis.domain.User.updateUserById", u);
return i;
}
public int updateUser(User u) {
int i = this.getSqlSession().update("com.cc.mybatis.domain.User.updateUserByCondition", u);
return i;
}
}
public interface IUserService {
public User findUserById(String id);
public List<User> findAllUser();
public List<User> findUserByCondition(User u);
public int deleteUserById(String id);
public int saveUser(User u);
public int updateUserById(User u);
public int updateUser(User u);
}
public class UserServiceImpl implements IUserService {
private IUserDao userDao;
public int deleteUserById(String id) {
int i = userDao.deleteUserById(id);
//int c = 1 / 0;
return i;
}
public List<User> findAllUser() {
return userDao.findAllUser();
}
public List<User> findUserByCondition(User u) {
return userDao.findUserByCondition(u);
}
public User findUserById(String id) {
return userDao.findUserById(id);
}
public int saveUser(User u) {
return userDao.saveUser(u);
}
public int updateUser(User u) {
return userDao.updateUser(u);
}
public int updateUserById(User u) {
return userDao.updateUserById(u);
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
}
在spring配置中注入dao和service
测试
测试成功,表示mybatis和spring已经成功整合了。
通过springAOP加入事务
故意出错:
测试结果:
数据依然存在,说明事务也已经配置成功了。
测试代码如下:
public class MyBatisTest {
@Test
public void test1(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User u = userDao.findUserById("1");
System.out.println(u);
}
@Test
public void test2(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
List<User> users = userDao.findAllUser();
for(User u: users){
System.out.println(u);
}
}
@Test
public void test3(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0002");
user.setUserName("lisi");
user.setAddress("beijing");
List<User> users = userDao.findUserByCondition(user);
for(User u: users){
System.out.println(u);
}
}
@Test
public void test4(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
int i = userDao.deleteUserById("0002");
System.out.println(i);
}
@Test
public void test5(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0002");
user.setUserName("lisi");
user.setAddress("beijing");
int i = userDao.saveUser(user);
System.out.println(i);
}
@Test
public void test6(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0003");
user.setUserName("zhangsan");
//user.setAddress("nanjing");
int i = userDao.updateUserById(user);
System.out.println(i);
}
@Test
public void test7(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0004");
//user.setUserName("jack");
//user.setAddress("beijing");
int i = userDao.updateUser(user);
System.out.println(i);
}
@Test
public void test8(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserService userService = (IUserService) ctx.getBean("userService");
int i = userService.deleteUserById("1");
System.out.println(i);
}
}