发表于: 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的了解


返回列表 返回列表
评论

    分享到