发表于: 2017-11-01 23:38:31
2 758
day12
今日完成
实现mybatis对数据库的增删改查
userMapper.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.mybatis.mapping.userMapper">
<!--根据id查询得到一个user对象-->
<select id="getUser" parameterType="int"
resultType="User">
select * from users where id=#{id}
</select>
<!--查询全部用户-->
<select id="getAllUsers" resultType="User">
select * from users
</select>
<!-- 创建用户(Create) -->
<insert id="addUser" parameterType="User">
insert into users(name,age) values (#{name},#{age})
</insert>
<!-- 删除用户(Remove) -->
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<!-- 修改用户(Update) -->
<update id="updateUser" parameterType="User">
update users set name=#{name},age=#{age} where id=#{id}
</update>
</mapper>
工具类MyBatisUtil.class
package com.mybatis.util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class MyBatisUtil {
/**
* 获取SqlSessionFactory
* @return SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() {
String resource = "mybatis-config.xml";
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
}
/**
* 获取SqlSession
* @return SqlSession
*/
public static SqlSession getSqlSession() {
return getSqlSessionFactory().openSession();
}
/**
* 获取SqlSession
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
}
}
单元测试类TestForCRUD
import com.mybatis.domin.User;
import com.mybatis.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class TestForCRUD {
@Test
public void testAdd() {
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
String statement = "com.mybatis.mapping.userMapper.addUser";
User user = new User();
user.setName("周杰伦");
user.setAge(25);
int retResult = sqlSession.insert(statement, user);
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testGetUser() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
String statement = "com.mybatis.mapping.userMapper.getUser";
User user=sqlSession.selectOne(statement,3);
sqlSession.close();
System.out.println(user);
}
@Test
public void testUpdate() {
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
String statement = "com.mybatis.mapping.userMapper.updateUser";
User user = new User();
user.setId(3);
user.setName("李四光");
user.setAge(25);
int retResult = sqlSession.update(statement, user);
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testDelete() {
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
String statement = "com.mybatis.mapping.userMapper.deleteUser";
int retResult = sqlSession.delete(statement, 2);
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testGetAll() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
String statement = "com.mybatis.mapping.userMapper.getAllUsers";
List<User> lstUsers = sqlSession.selectList(statement);
sqlSession.close();
System.out.println(lstUsers);
}
}
运行结果
遇到的困难
1,出现异常
两种解决方法:
一:在mybatis的配置文件添加写typeAliases
二:在mapper.xml里面resultMap的Type用到那个实体类名的话就要把包名也写上去
<typeAliases>
<package name="com.mybatis.domin"/>
</typeAliases>
2,对于单元测试类TestForCRUD.java结果为什么跟我预想的不一样呢,难道不是按顺序从上到下执行吗。
现在得到的结果是
(1)数据库原来有两个记录,我添加了一个,然后更新了后添加的数据,总共只有3条数据吧。。。
(2)然后把第2条数据删了,这个表的id不能自动变成123吗?
明日计划
学习mybatis代理方法和junit
收获
加深了mybatis的了解
评论