> 文章列表 > Java企业级开发学习笔记——Mybatis

Java企业级开发学习笔记——Mybatis

Java企业级开发学习笔记——Mybatis

文章目录

  • bean
    • Clazz.java
    • Student.java
    • Teacher.java
    • User.java
  • config
    • MyBatisConfig.java
  • mapper
    • ClazzMapper.java
    • StudentMapper.java
    • UserMapper.java
  • resources
    • log4j.properties
    • mybatis-config.xml
  • resources.mapper
    • ClazzMapper.xml
    • StudentMapper.xml
    • UserMapper.xml
  • test.java.net.sherry.mybatis.bean
    • TestUserOperation.java
  • test.java.net.sherry.mybatis.mapper
    • TestClazzMapper.java
    • TestStudentMapper.java
    • TestuserMapper.java
    • TestUserMapperNew.java

bean

Clazz.java

package net.sherry.mybatis.bean;import java.util.List;/* 功能:班级实体类* 作者:Sherry* 日期:2023年04月11日*/
public class Clazz {private int id;private String name;private Teacher teacher;private List<Student> students;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 Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}public List<Student> getStudents() {return students;}public void setStudents(List<Student> students) {this.students = students;}@Overridepublic String toString() {return "Clazz{" +"id=" + id +", name='" + name + '\\'' +", teacher=" + teacher.getName() +", students=" + students +'}';}
}

Student.java

package net.sherry.mybatis.bean;/* 功能:学生实体类* 作者:sherry* 日期:2021年04月11日*/
public class Student {private int id;private String name;private String gender;private int age;private Clazz clazz;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 getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Clazz getClazz() {return clazz;}public void setClazz(Clazz clazz) {this.clazz = clazz;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\\'' +", gender='" + gender + '\\'' +", age=" + age +", clazz=" + clazz.getName() +'}';}
}

Teacher.java

package net.sherry.mybatis.bean;/* 功能:教师实体类* 作者:Sherry* 日期:2023年04月11日*/
public class Teacher {private int id;private String name;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;}@Overridepublic String toString() {return "Teacher{" +"id=" + id +", name='" + name + '\\'' +'}';}
}

User.java

package net.sherry.mybatis.bean;/* 功能:用户实体类* 作者:sherry* 日期:2023年04月11日*/
public class User {private int id;private String name;private int age;private String address;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 int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\\'' +", age=" + age +", address='" + address + '\\'' +'}';}
}

config

MyBatisConfig.java

package net.sherry.mybatis.config;import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import javax.sql.DataSource;/* 功能:MyBatis配置类* 作者:sherry* 日期:2023年04月11日*/
public class MyBatisConfig {// 获取MyBatis配置对象public static Configuration getConfiguration() {// 声明配置对象Configuration configuration = null;// 创建JDBC事务管理器TransactionFactory transactionFactory = new JdbcTransactionFactory();// 创建数据源DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver","jdbc:mysql://localhost:3306/testdb?useSSL=false","root","111111");// 创建数据库环境Environment environment = new Environment("development", transactionFactory, dataSource);// 基于数据库环境创建配置对象configuration = new Configuration(environment);// 返回配置对象return  configuration;}
}

mapper

ClazzMapper.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.Clazz;import java.util.List;/* 功能:班级映射器接口* 作者:Sherry* 日期:2023年04月11日*/
public interface ClazzMapper {Clazz findById(int id);List<Clazz> findAll();
}

StudentMapper.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.Student;import java.util.List;
import java.util.Map;/* 功能:学生映射器接口* 作者:Sherry* 日期:2023年04月11日*/
public interface StudentMapper {List<Student> findByCondition(Map<String, Object> condition);
}

UserMapper.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.User;
import org.apache.ibatis.annotations.Select;import java.util.List;/* 功能:用户映射器接口* 作者:Sherry* 日期:2023年04月11日*/
public interface UserMapper {
//    @Select("SELECT * FROM t_user WHERE id = #{id}")User findById(int id);  // 按编号查询用户记录
//    @Select("SELECT * FROM t_user")List<User> findAll();   // 查询全部用户记录List<User> findByName(String name); // 按姓名查询用户巨龙int insert(User user);int update(User user);int deleteById(int id);
}

resources

log4j.properties

log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/mybatis.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置实体类别名--><typeAliases><typeAlias type="net.sherry.mybatis.bean.User" alias="User"/><typeAlias type="net.sherry.mybatis.bean.Clazz" alias="Clazz"/><typeAlias type="net.sherry.mybatis.bean.Teacher" alias="Teacher"/><typeAlias type="net.sherry.mybatis.bean.Student" alias="Student"/></typeAliases><!--配置数据库环境--><environments default="development"><environment id="development"><!--配置事务管理器--><transactionManager type="JDBC"/><!--配置数据源--><dataSource type="POOLED"> <!--数据库连接池--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/testdb?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="111111"/> <!--改成自己的密码--></dataSource></environment></environments><!--配置实体关系映射器文件--><mappers><mapper resource="mapper/UserMapper.xml"/><mapper resource="mapper/ClazzMapper.xml"/><mapper resource="mapper/StudentMapper.xml"/></mappers>
</configuration>

resources.mapper

ClazzMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="net.sherry.mybatis.mapper.ClazzMapper"><!--三表关联查询--><select id="findById" parameterType="int" resultMap="clazzResultMap">SELECT * FROM t_teacherINNER JOIN t_class ON t_class.teacher_id = t_teacher.t_idINNER JOIN t_student ON t_class.c_id = t_student.class_idWHERE c_id = #{id};</select><!--定义班级结果映射--><resultMap id="clazzResultMap" type="Clazz"><result property="id" column="c_id"/><result property="name" column="c_name"/><!--一对一--><association property="teacher" column="teacher_id" javaType="Teacher"><result property="id" column="t_id"/><result property="name" column="t_name"/></association><!--一对多--><collection property="students" ofType="Student"><result property="id" column="s_id"/><result property="name" column="s_name"/><result property="gender" column="s_gender"/><result property="age" column="s_age"/><association property="clazz" column="class_id" javaType="Clazz"><result property="name" column="c_name"/></association></collection></resultMap><!--##--><!--通过嵌套查询实现一对一关联--><select id="findAll" resultMap="clazzResultMap2">SELECT * FROM t_class;</select><!--定义班级结果映射--><resultMap id="clazzResultMap2" type="Clazz"><result property="id" column="c_id"/><result property="name" column="c_name"/><association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher"/></resultMap><select id="getTeacher" resultType="Teacher">SELECT t_id id, t_name name FROM t_teacher WHERE t_id = #{id};</select>
</mapper>

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="net.sherry.mybatis.mapper.StudentMapper"><select id="findByCondition" parameterType="java.util.Map" resultMap="studentResultMap">SELECT * FROM t_student<trim prefix="WHERE" prefixOverrides="AND|OR"><if test="name != null">s_name Like CONCAT(#{name},'%')</if><if test="gender != null">AND s_gender = #{gender}</if><if test="age != null">AND s_age = #{age}</if></trim></select><resultMap id="studentResultMap" type="Student"><result column="s_id" property="id"/><result column="s_name" property="name"/><result column="s_gender" property="gender"/><result column="s_age" property="age"/><association property="clazz" column="class_id" javaType="Clazz" select="getClazz"/></resultMap><select id="getClazz" resultType="Clazz">SELECT c_id id, c_name name FROM t_class WHERE c_id = #{id};</select>
</mapper>

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="net.sherry.mybatis.mapper.UserMapper">
<!--    结果映射:用户映射--><resultMap id="userMap" type="User"><result column="id" jdbcType="INTEGER" property="id" javaType="int"/><result column="name" jdbcType="VARCHAR" property="name" javaType="String"/><result column="age" jdbcType="INTEGER" property="age" javaType="int"/><result column="address" jdbcType="VARCHAR" property="address" javaType="String"/></resultMap><!--按编号查询用户记录--><select id="findById" parameterType="int" resultType="User">SELECT * FROM t_user WHERE id = #{id};</select><!--    按照姓名查询--><select id="findByName" resultType="User">select * from t_user where name like concat(#{name}, "%");</select><!--查询全部用户记录--><select id="findAll" resultMap="userMap">SELECT * FROM t_user;</select><insert id="insert" parameterType="User"useGeneratedKeys="true" keyProperty="id">INSERT INTO t_user(name, age, address)VALUES(#{name}, #{age}, #{address})</insert><update id="update" parameterType="User">UPDATE t_user SET name = #{name}, age = #{age},address = #{address} WHERE id = #{id};</update><delete id="deleteById" parameterType="int">DELETE FROM t_user WHERE id = #{id};</delete></mapper>

test.java.net.sherry.mybatis.bean

TestUserOperation.java

package net.sherry.mybatis.bean;import net.sherry.mybatis.bean.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.Before;
import org.junit.Test;import java.io.IOException;
import java.io.Reader;
import java.util.List;/* 功能:测试用户操作* 作者:sherry* 日期:2023年04月11日*/
public class TestUserOperation {private SqlSession sqlSession; // SQL会话@Beforepublic void init() {try {// 读取MyBatis配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 基于MyBatis配置文件构建SQL会话工厂SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);// 利用SQL会话工厂获取SQL会话sqlSession = factory.openSession();// 提示用户SQL会话创建成功System.out.println("SQL会话创建成功~");} catch (IOException e) {e.printStackTrace();}}@Test // 测试按编号查询用户记录public void testFindById() {int id = 1;// 利用SQL会话执行SQL语句进行查询,返回查询结果User user = sqlSession.selectOne("net.sherry.mybatis.mapper.UserMapper.findById", id);// 判断查询是否成功if (user != null) {System.out.println(user);} else {System.out.println("编号为[" + id + "]的用户未找到~");}}@Test // 测试查询全部用户记录public void testFindAll() {// 利用SQL会话执行SQL语句进行查询,返回查询结果List<User> users = sqlSession.selectList("net.sherry.mybatis.mapper.UserMapper.findAll");// 输出全部用户信息(采用了列表的遍历算子与Lambda表达式)users.forEach(user -> System.out.println(user));}@Afterpublic void destroy() {// 关闭SQL会话sqlSession.close();// 提示用户SQL会话关闭System.out.println("SQL会话已经关闭~");}
}

test.java.net.sherry.mybatis.mapper

TestClazzMapper.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.Clazz;
import net.sherry.mybatis.bean.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.Null;
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.Before;
import org.junit.Test;import java.io.IOException;
import java.io.Reader;
import java.util.List;/* 功能:测试班级映射器接口* 作者:sherry* 日期:2023年04月11日*/
public class TestClazzMapper {private SqlSession sqlSession; // SQL会话private ClazzMapper clazzMapper; // 班级映射器@Beforepublic void init() {try {// 读取MyBatis配置文件作为字符输入流Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 基于MyBatis配置文件构建SQL会话工厂SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);// 利用SQL会话工厂获取SQL会话sqlSession = factory.openSession();// 利用SQL会话获取班级映射器对象clazzMapper = sqlSession.getMapper(ClazzMapper.class);System.out.println("SQL回话创建成功~");} catch (IOException e) {e.printStackTrace();}}@Testpublic void testFindById() {int id = 1;Clazz clazz = clazzMapper.findById(id);if (clazz != null) {System.out.println(clazz);System.out.println("班级编号[" + id + "]的学生:");List<Student> students = clazz.getStudents();students.forEach(student -> System.out.println(student));}else {System.out.println("班级编号[" + id + "]的班级不存在~");}}@Testpublic void testFindAll() {List<Clazz> clazzes = clazzMapper.findAll();clazzes.forEach(clazz -> System.out.println(clazz));}@Afterpublic void destroy() {// 关闭SQL会话sqlSession.close();System.out.println("SQL会话关闭~");}
}

TestStudentMapper.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.Student;
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.Before;
import org.junit.Test;import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;/* 功能:测试学生映射器接口* 作者:sherry* 日期:2023年04月11日*/
public class TestStudentMapper {private SqlSession sqlSession; // SQL会话private StudentMapper studentMapper; // 学生映射器@Beforepublic void init() {try {// 读取MyBatis配置文件作为字符输入流Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 基于MyBatis配置文件构建SQL会话工厂SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);// 利用SQL会话工厂获取SQL会话sqlSession = factory.openSession();// 利用SQL会话获取学生映射器对象studentMapper = sqlSession.getMapper(StudentMapper.class);System.out.println("创建SQL成功~");} catch (IOException e) {e.printStackTrace();}}@Testpublic void testFindByCondition(){HashMap<String, Object> condition = new HashMap<String, Object>();condition.put("gender", "女");condition.put("age", 19);condition.put("name", "吴");List<Student> students = studentMapper.findByCondition(condition);if (students.size() > 0){students.forEach(student -> System.out.println(student));}else {System.out.println("没有找到~");}}@Afterpublic void destroy() {// 关闭SQL会话sqlSession.close();System.out.println("已关闭SQL会话~");}
}

TestuserMapper.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.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.Before;
import org.junit.Test;import java.io.IOException;
import java.io.Reader;
import java.util.List;/* 功能:测试用户映射器接口* 作者:sherry* 日期:2023年04月11日*/
public class TestUserMapper {private SqlSession sqlSession; // SQL会话private UserMapper userMapper; // 用户映射器@Beforepublic void init() {try {// 读取MyBatis配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 基于MyBatis配置文件构建SQL会话工厂SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);// 利用SQL会话工厂获取SQL会话sqlSession = factory.openSession();// 利用SQL会话获取用户映射器对象userMapper = sqlSession.getMapper(UserMapper.class);// 提示用户SQL会话创建成功System.out.println("SQL会话创建成功~");} catch (IOException e) {e.printStackTrace();}}@Test // 测试按编号查询用户记录public void testFindById() {int id = 1;// 调用用户映射器的查询方法User user = userMapper.findById(id);// 判断查询是否成功if (user != null) {System.out.println(user);} else {System.out.println("编号为[" + id + "]的用户未找到~");}}@Testpublic void testFindByName(){String name = String.valueOf('王');// 调用用户映射器的查询方法List<User> users = userMapper.findByName(name);users.forEach(user -> System.out.println(user));}@Test // 测试查询全部用户记录public void testFindAll() {// 调用用户映射器的查询方法List<User> users = userMapper.findAll();// 输出全部用户信息(采用了列表的遍历算子与Lambda表达式)users.forEach(user -> System.out.println(user));}@Afterpublic void destroy() {// 关闭SQL会话sqlSession.close();// 提示用户SQL会话关闭System.out.println("SQL会话已经关闭~");}@Testpublic void testInsert(){User user = new User();user.setName("王雨涵");user.setAge(30);user.setAddress("古蔺县郎酒厂");int count = userMapper.insert(user);sqlSession.commit();if (count > 0){System.out.println("纪录插入成功!");System.out.println("插入新的纪录:" +user);}else {System.out.println("纪录插入失败!");}}@Testpublic void testUpdate(){User user = userMapper.findById(4);System.out.println("更新前的纪录: " + userMapper.findById(4));user.setName("萌萌哒");user.setAge(30);user.setAddress("北京朝阳区北苑路6号楼");userMapper.update(user);sqlSession.commit();System.out.println("更新成功!");System.out.println("更新后的记录:"+ userMapper.findById(4));}@Testpublic void testDeleteById(){int id = 4;User user = userMapper.findById(id);System.out.println("待删除的记录:" + user);userMapper.deleteById(id);sqlSession.commit();System.out.println("编号为[" + id + "]的记录删除成功!");user = userMapper.findById(id);if (user != null){System.out.println(user);}else {System.out.println("编号为[" + id + "] 的用户未找到");}}
}

TestUserMapperNew.java

package net.sherry.mybatis.mapper;import net.sherry.mybatis.bean.User;
import net.sherry.mybatis.config.MyBatisConfig;
import org.apache.ibatis.session.Configuration;
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.Before;
import org.junit.Test;import java.util.List;/* 功能:测试用户映射器接口* 作者:sherry* 日期:2023年04月11日*/
public class TestUserMapperNew {private SqlSession sqlSession; // SQL会话private UserMapper userMapper; // 用户映射器@Beforepublic void init() {// 获取MyBatis配置对象Configuration configuration = MyBatisConfig.getConfiguration();// 添加用户映射器接口configuration.addMapper(UserMapper.class);// 基于配置对象构建SQL会话工厂SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configuration);// 利用SQL会话工厂获取SQL会话sqlSession = factory.openSession();// 利用SQL会话获取用户映射器对象userMapper = sqlSession.getMapper(UserMapper.class);// 提示用户SQL会话创建成功System.out.println("SQL会话创建成功~");}@Test // 测试按编号查询用户记录public void testFindById() {int id = 1;// 调用用户映射器的查询方法User user = userMapper.findById(id);// 判断查询是否成功if (user != null) {System.out.println(user);} else {System.out.println("编号为[" + id + "]的用户未找到~");}}@Test // 测试查询全部用户记录public void testFindAll() {// 调用用户映射器的查询方法List<User> users = userMapper.findAll();// 输出全部用户信息(采用了列表的遍历算子与Lambda表达式)users.forEach(user -> System.out.println(user));}@Afterpublic void destroy() {// 关闭SQL会话sqlSession.close();// 提示用户SQL会话关闭System.out.println("SQL会话已经关闭~");}
}