发表于: 2019-12-15 18:56:13
1 1092
今天完成的事情:
1.编写了使用mybatis增删改查的测试
1)User
package com.mybatisCRUD.beans;
public class User {
private int id;
private String name;
private String pwd;
public User(){};
public User(String name,String pwd){
this.name=name;
this.pwd=pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
}
}
2)UserMapper
package com.mybatisCRUD.mapper;
import com.mybatisCRUD.beans.User;
import java.util.List;
public interface UserMapper {
public int insertUser(User user) throws Exception;
public int updateUser(User user, int id) throws Exception;
public int deleteUser(int id) throws Exception;
public User selectUserById(int id) throws Exception;
public List<User> selectAllUser() throws Exception;
}
3)UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.mybatis.mapper.UserMapper">
<!-- 自定义返回结果集 -->
<resultMap id="userMap" type="User">
<id property="id" column="id" javaType="java.lang.Integer"></id>
<result property="username" column="username" javaType="java.lang.String"></result>
<result property="password" column="password" javaType="java.lang.String"></result>
<result property="account" column="account" javaType="java.lang.Double"></result>
</resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。
parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->
<!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->
<!--keyProperty: (仅对 insert有用)标记一个属性,
MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into user (name, pwd)
values (#{name}, #{pwd})
</insert>
<update id="updateUser">
update user
set name=#{name},
pwd=#{pwd}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete
from user
where id = #{id}
</delete>
<select id="selectUserById" parameterType="int" resultMap="userMap">
select *
from user
where id = #{id}
</select>
<select id="selectAllUser" resultMap="userMap">
select *
from user
</select>
</mapper>
4)DBTools
package com.mybatisCRUD.tools;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.Reader;
public class DBTools {
public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resources类加载mybatis的配置文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建能执行映射文件中sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
5)UserServiceTest
package com.mybatisCRUD.service;
import com.mybatisCRUD.beans.User;
import com.mybatisCRUD.mapper.UserMapper;
import com.mybatisCRUD.tools.DBTools;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import java.util.List;
public class UserServiceTest {
@Test
//添加操作
public void insertUser() throws Exception {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User("多多","qq22222");
try {
mapper.insertUser(user);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
//删除操作
public void deleteUser() throws Exception {
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
mapper.deleteUser(1);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
//选择操作
public void selectUserById() throws Exception {
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
//这里用到User类的无参构造方法创建对象,User user=new User();
User user =mapper.selectUserById(2);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
public void selectAllUser() throws Exception {
SqlSession session= DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
List<User> user=mapper.selectAllUser();
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
6)mabatis.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>
<!-- 引入外部配置文件 -->
<properties resource="db.properties"></properties>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driverClass" value="${driverClass}" />
<property name="url" value="${url}" />
<property name="user" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--mybatis.cfg.xml里注册UserMapper.xml文件-->
<mappers>
<!--<!– 告知映射文件方式1,一个一个的配置-->
<mapper resource="com/mybatisCRUD/mapper/UserMapper.xml"/>
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<!--<package name="com/cy/mybatis/mapper"/>-->
</mappers>
</configuration>
明天计划的事情:修改bug,学习log4j,基础学习
遇到的问题:
没测试出来,提示空指针异常at com.mybatisCRUD.tools.DBTools.getSession,估计是工具类的代码有点问题。
对代码的理解不足,所以就去看了看mybatis的基础视频,对代码的理解加深了不少。
收获:
1.为什么要用mybatis
2.mybatis的使用流程
3.mybatis.xml中名词的解释
评论