1.编写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="zjhsxl">
<insert id="addUser" parameterType="com.pro.domain.User">
insert into user(userId,userName,password) values(#{userId},#{userName},#{password})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where userId=#{userId}
</delete>
<update id="updateUser" parameterType="com.pro.domain.User">
update user set userName=#{userName},password=#{password} where userId=#{userId}
</update>
<select id="selectOne" parameterType="int" resultType="com.pro.domain.User">
select * from user where userId=#{userId}
</select>
</mapper>
类似dao层
2.编写MyTest.java
package com.pro.test;
import com.pro.domain.User;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyTest {
@Test
public void testSave() throws IOException {
//拿到配置文件 mybatis-config
//准备一个管道 ,接在mybatis-config后面
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//使用这个文件,创建一个工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User(7,"小芳","123");
sqlSession.insert("zjhsxl.addUser",user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testDelete() throws IOException {
//拿到配置文件 mybatis-config
//准备一个管道 ,接在mybatis-config后面
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//使用这个文件,创建一个工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("zjhsxl.deleteUser",3);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testUpdate() throws IOException {
//拿到配置文件 mybatis-config
//准备一个管道 ,接在mybatis-config后面
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//使用这个文件,创建一个工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User(7,"小芳fangfang","123");
sqlSession.update("zjhsxl.updateUser",user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testSelect() throws IOException {
//拿到配置文件 mybatis-config
//准备一个管道 ,接在mybatis-config后面
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//使用这个文件,创建一个工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("zjhsxl.selectUser",7);
System.out.println("--->"+user.getUserName());
sqlSession.close();
}
}
实现增删查改
3.增加before方法和after方法,降低代码重复
package com.pro.test;
import com.pro.domain.User;
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 org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyTest {
SqlSession sqlSession = null;
@Before
public void setUp() throws Exception {
//拿到配置文件 mybatis-config
//准备一个管道 ,接在mybatis-config后面
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//使用这个文件,创建一个工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
sqlSession = sqlSessionFactory.openSession();
}
@After
public void tearDown() throws Exception {
sqlSession.close();
}
@Test
public void testSave() throws IOException {
User user = new User(7, "小芳", "123");
sqlSession.insert("zjhsxl.addUser", user);
sqlSession.commit();
}
@Test
public void testDelete() throws IOException {
sqlSession.delete("zjhsxl.deleteUser", 3);
sqlSession.commit();
}
@Test
public void testUpdate() throws IOException {
User user = new User(7, "小芳fang", "123");
sqlSession.update("zjhsxl.updateUser", user);
sqlSession.commit();
}
@Test
public void testSelect() throws IOException {
User user = sqlSession.selectOne("zjhsxl.selectUser", 7);
System.out.println("--->" + user.getUserName());
}
}
4.如果修改了数据库,如何更改查询语句
修改user.xml
<select id="selectUser" parameterType="int" resultType="com.pro.domain.User">
select userId,userName1 as 'userName',password from user where userId=#{userId}
</select>
5.如果修改了很多,如何对其Java类的属性名和数据库的属性名
修改user.xml
<!-- 关联了Java类和数据库表-->
<mapper namespace="zjhsxl">
<resultMap id="userMap" type="com.pro.domain.User">
<id property="userId" column="userId"/>
<result property="userName" column="userName"/>
<result property="password" column="password"/>
</resultMap>
6添加info和classes类
package com.pro.domain;
public class Info {
private Integer infoId;
private String msg;
private Classes classes;
private User user;
public Integer getInfoId() {
return infoId;
}
public void setInfoId(Integer infoId) {
this.infoId = infoId;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
package com.pro.domain;
public class Classes {
private int classId;
private String className;
public int getClassId() {
return classId;
}
public void setClassId(int classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
7.添加info.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="zjhsxl">
<resultMap id="infoMap" type="com.pro.domain.Info">
<id property="infoId" column="infoId"/>
<result property="msg" column="msg"/>
<result property="classes.classId" column="classId"/>
<result property="classes.Name" column="className"/>
<result property="user.userId" column="userId"/>
<result property="user.userName" column="userName"/>
<result property="user.password" column="password"/>
</resultMap>
<select id="selectInfo" parameterType="int" resultMap="infoMap">
select * from info where infoId=#{infoId}
</select>
</mapper>
8.添加info.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="zjhsxl">
<resultMap id="infoMap" type="com.pro.domain.Info">
<id property="user.userId" column="userId"/>
<result property="user.userName" column="userName"/>
<result property="user.password" column="password"/>
<result property="classes.classId" column="classId"/>
<result property="classes.className" column="className"/>
</resultMap>
<select id="selectInfo" parameterType="int" resultMap="infoMap">
select * from user u,classes c where u.classId=c.classId
</select>
</mapper>
9.添加一个测试方法,同时显示两张class和user两张表的内容
@Test
public void testSelectInfo() throws IOException {
List<Info> infoList = sqlSession.selectList("zjhsxl.selectInfo");
sqlSession.commit();
System.out.println(infoList.size());
}
遇到的难点:运行报错 userId显示为null ,因为info类中新建了user,可是user类中我写了user的有参构造方法,最后自己补上一个无参的构造方法才能新建user
本文介绍了如何使用MyBatis进行User对象的CRUD操作,包括编写user.xml映射文件、Java接口测试及对象属性映射的调整。通过实例展示了如何在修改数据库结构后更新映射,并演示了同时查询User和Classes表的测试方法。
1067

被折叠的 条评论
为什么被折叠?



