MySqlSessionFactory.java
package factory; 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.InputStream; public class MySqlSessionFactory { private static SqlSessionFactory sqlSessionFactory = null; static{ // 初始化创建SqlSessionFactory对象 try { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 读取mybatis-config.xml文件 sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ // 获取SqlSession对象的静态方法 return sqlSessionFactory.openSession(); } public static SqlSessionFactory getSqlSessionFactory() { // 获取SqlSessionFactory的静态方法 return sqlSessionFactory; } }
Clazz.java
package pojo; import java.util.List; /** * CREATE TABLE `tb_clazz` ( id INT(11) PRIMARY KEY AUTO_INCREMENT, code VARCHAR(18) DEFAULT NULL ) COMMENT '班级表'; INSERT INTO tb_clazz(CODE) VALUES ('j1601'); INSERT INTO tb_clazz(CODE) VALUES ('j1602'); */ public class Clazz { private Integer id; private String code; private List<Student> students; public Clazz() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } @Override public String toString() { return "Clazz [id=" + id + ", code=" + code + "]"; } }
Student.java
package pojo; /** * CREATE TABLE `tb_student` ( id INT(11) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(18) DEFAULT NULL, sex CHAR(2) DEFAULT NULL, age INT(11) DEFAULT NULL, clazz_id INT(11), FOREIGN KEY (clazz_id) REFERENCES tb_clazz(id) ) COMMENT '学生表'; INSERT INTO tb_student(NAME, sex, age, clazz_id) VALUES ('tom', '男', 22, 1); INSERT INTO tb_student(NAME, sex, age, clazz_id) VALUES ('rose', '女', 18, 1); INSERT INTO tb_student(NAME, sex, age, clazz_id) VALUES ('tom', '男', 25, 2); INSERT INTO tb_student(NAME, sex, age, clazz_id) VALUES ('mary', '女', 20, 2); */ public class Student { private Integer id; private String name; private String sex; private Integer age; private Clazz clazz;// 关联的Clazz对象 public Student() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Clazz getClazz() { return clazz; } public void setClazz(Clazz clazz) { this.clazz = clazz; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", clazz=" + clazz + "]"; } }
User.java
package pojo; import java.io.Serializable; /** * CREATE TABLE `tb_user2` ( user_id INT(11) PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR(18) DEFAULT NULL, user_sex CHAR(2) DEFAULT NULL, user_age INT(11) DEFAULT NULL ) COMMENT '用户表2'; INSERT INTO tb_user2(user_name, user_sex, user_age) VALUES ('jack', '男', 22); INSERT INTO tb_user2(user_name, user_sex, user_age) VALUES ('rose', '女', 18); INSERT INTO tb_user2(user_name, user_sex, user_age) VALUES ('tom', '男', 25); INSERT INTO tb_user2(user_name, user_sex, user_age) VALUES ('mary', '女', 20); */ public class User implements Serializable{ private Integer id;// 用户标识 private String name;// 用户姓名 private String sex;// 用户性别 private Integer age;// 用户年龄 public User() { // 无参数构造器 super(); } public User( String name, String sex, Integer age) { // 有参数构造器 super(); this.name = name; this.sex = sex; this.age = age; } // setter和getter方法 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } }
db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://192.168.1.13:3306/mybatis?useSSL=false username=root password=Abcdef@123456
log4j.properties
log4j.rootLogger=ERROR, stdout # 全局的日志配置 log4j.logger.UserMapper=DEBUG # MyBatis的日志配置 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n # 控制台输出
mybatis-config.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"> <!-- XML 配置文件包含对 MyBatis 系统的核心设置 --> <configuration> <properties resource="db.properties"/> <!-- 指定 MyBatis 所用日志的具体实现 --> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <environments default="mysql"> <!-- 环境配置,即连接的数据库。 --> <environment id="mysql"> <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 --> <transactionManager type="JDBC"/> <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
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"> <!-- namespace指用户自定义的命名空间。 --> <mapper namespace="UserMapper"> <!-- select操作 resultType="map"表示返回的是一个Map对象 使用列名做key,值做value --> <select id="selectUser" resultType="map"> SELECT * FROM tb_user </select> <resultMap id="userResultMap" type="pojo.User"> <id property="id" column="user_id" /> <result property="name" column="user_name"/> <result property="sex" column="user_sex"/> <result property="age" column="user_age"/> </resultMap> <!--resultMap="userResultMap"表示引用上面的resultMap进行数据库表和返回类型对象的映射--> <select id="selectUser2" resultMap="userResultMap"> SELECT * FROM tb_user2 </select> <!-- 映射学生对象的resultMap --> <resultMap id="studentResultMap" type="pojo.Student"> <id property="id" column="id" /> <result property="name" column="name"/> <result property="sex" column="sex"/> <result property="age" column="age"/> <!-- 关联映射 --> <association property="clazz" column="clazz_id" javaType="pojo.Clazz" select="selectClazzWithId"/> </resultMap> <!-- 根据班级id查询班级 --> <select id="selectClazzWithId" resultType="pojo.Clazz"> SELECT * FROM tb_clazz where id = #{id} </select> <!-- 查询所有学生信息 --> <select id="selectStudent" resultMap="studentResultMap"> SELECT * FROM tb_student </select> <!-- 映射班级对象的resultMap --> <resultMap id="clazzResultMap" type="pojo.Clazz"> <id property="id" column="id" /> <result property="code" column="code"/> <!-- 班级的学生属性,因为一个班级有多个学生,所以该属性是一个集合 --> <collection property="students" javaType="ArrayList" column="id" ofType="pojo.Student" select="selectStudentWithId"/> </resultMap> <!-- 根据班级id查询学生 --> <select id="selectStudentWithId" resultType="pojo.Student"> SELECT * FROM tb_student where clazz_id = #{id} </select> <!-- 查询所有班级信息 --> <select id="selectClazz" resultMap="clazzResultMap"> SELECT * FROM tb_clazz </select> </mapper>
ResultMapTest.java
import factory.MySqlSessionFactory; import org.apache.ibatis.session.SqlSession; import pojo.User; import java.util.List; public class ResultMapTest { public static void main(String[] args) { SqlSession session = MySqlSessionFactory.getSqlSession(); // 获得Session实例 List<User> user_list = session.selectList("UserMapper.selectUser2"); // 查询tb_user2表所有数据返回List集合,集合中的每个元素都是一个Map for(User user : user_list){ System.out.println(user); // 遍历List集合,打印每一个Map对象 } session.commit(); // 提交事务 session.close(); // 关闭Session } }
SelectClazzTest.java
import factory.MySqlSessionFactory; import org.apache.ibatis.session.SqlSession; import pojo.Clazz; import pojo.Student; import java.util.List; public class SelectClazzTest { public static void main(String[] args) throws Exception { SqlSession session = MySqlSessionFactory.getSqlSession(); // 获得Session实例 List<Clazz> clazz_list = session.selectList("UserMapper.selectClazz"); // 查询tb_clazz表所有数据返回List集合,集合中的每个元素都是一个Clazz对象 for(Clazz clazz : clazz_list){ System.out.println(clazz); List<Student> student_list = clazz.getStudents(); for(Student stu : student_list){ System.out.println(stu.getId() + " " + stu.getName() + " " + stu.getSex() + " " + stu.getAge()); // 遍历List集合,打印每一个Clazz对象和该Clazz关联的所有Student对象 } } session.commit(); // 提交事务 session.close(); // 关闭Session } }
SelectMapTest.java
import factory.MySqlSessionFactory; import org.apache.ibatis.session.SqlSession; import java.util.List; import java.util.Map; public class SelectMapTest { public static void main(String[] args) throws Exception { SqlSession session = MySqlSessionFactory.getSqlSession(); // 获得Session实例 List<Map<String,Object>> list = session.selectList("UserMapper.selectUser"); // 查询tb_user表所有数据返回List集合,集合中的每个元素都是一个Map for(Map<String,Object> row : list){ System.out.println(row); // 遍历List集合,打印每一个Map对象 } session.commit(); // 提交事务 session.close(); // 关闭Session } }
SelectStudentTest.java
import factory.MySqlSessionFactory; import org.apache.ibatis.session.SqlSession; import pojo.Student; import java.util.List; public class SelectStudentTest { public static void main(String[] args) throws Exception { SqlSession session = MySqlSessionFactory.getSqlSession(); // 获得Session实例 List<Student> student_list = session.selectList("UserMapper.selectStudent"); // 查询tb_student表所有数据返回List集合,集合中的每个元素都是一个Student对象 for(Student stu : student_list){ System.out.println(stu); // 遍历List集合,打印每一个Student对象,该对象包含关联的Clazz对象 } session.commit(); // 提交事务 session.close(); // 关闭Session } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>shanghai</groupId> <artifactId>ResultMaps</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.45</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.soureEncodng>UTF-8</maven.compiler.soureEncodng> </properties> </project>