第一步:创建数据库
CREATE TABLE tb_clazz( id INT PRIMARY KEY, code VARCHAR(18) ) CREATE TABLE tb_student( id INT PRIMARY KEY, name VARCHAR(18), sex VARCHAR(18), age INT, clazz_id INT, FOREIGN KEY (clazz_id) REFERENCES tb_clazz(id) )
第二步:引入MyBatis框架的jar包,配置mybatis配置文件
/MyBatis/src/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> <!-- 指定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="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- mapper告诉了MyBatis去哪找持久化类的映射文件 --> <mappers> <mapper resource="com/web/mybatis/mapper/UserMapper.xml"/> <mapper resource="com/web/mybatis/mapper/StudentMapper.xml"/> </mappers> </configuration>
/MyBatis/src/log4j.properties
#全局的日志配置
log4j.rootLogger=ERROR, stdout
#MyBatis的日志配置
log4j.logger.com.web.mybatis.mapper.UserMapper=DEBUG
#控制台输出
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/src/com/web/mybatis/domain/Clazz.java
package com.web.mybatis.domain; import java.util.List; public class Clazz { private Integer id; private String code; private List<Student> students; @Override public String toString() { return "Clazz [id=" + id + ", code=" + code + "]"; } public String ClazzToString() { StringBuffer s = new StringBuffer(); for(Student student : students) { s.append(student.StudentToString()); } return "Clazz [id=" + id + ", code=" + code + ", students={"+s.toString()+"}]"; } //省略get和set方法 }
/MyBatis/src/com/web/mybatis/domain/Student.java
package com.web.mybatis.domain; public class Student { private Integer id; private String name; private String sex; private Integer age; private Clazz clazz; @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", clazz=" + clazz.toString() + "]"; } public String StudentToString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } //省略get和set方法 }
第四步:映射文件
/MyBatis/src/com/web/mybatis/mapper/StudentMapper.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.web.mybatis.mapper.StudentMapper"> <!-- 查询学生,关联班级 --> <resultMap id="studentResultMap" type="com.web.mybatis.domain.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="com.web.mybatis.domain.Clazz" select="selectClazzWithId"/> </resultMap> <select id="selectClazzWithId" resultType="com.web.mybatis.domain.Clazz"> SELECT * FROM tb_clazz WHERE id=#{id} </select> <select id="selectStudent" resultMap="studentResultMap"> SELECT * FROM tb_student </select> <!-- 查询班级,关联学生 --> <resultMap id="clazzResultMap" type="com.web.mybatis.domain.Clazz" > <id property="id" column="id" /> <result property="code" column="code" /> <!-- 关联映射 --> <collection property="students" javaType="ArrayList" column="id" ofType="com.web.mybatis.domain.Student" select="selectStudentWithId" /> </resultMap> <select id="selectStudentWithId" resultType="com.web.mybatis.domain.Student"> SELECT * FROM tb_student WHERE clazz_id=#{id} </select> <select id="selectClazz" resultMap="clazzResultMap"> SELECT * FROM tb_clazz </select> </mapper>
第五步:测试
/MyBatis/src/com/web/mybatis/factory/FKSqlSessionFactory.java
package com.web.mybatis.factory; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /** * 封装读取配置文件mybatis-config.xml, * 根据文件信息创建SqlSessionFactory对象, * 再获取SqlSession对象 * */ public class FKSqlSessionFactory { private static SqlSessionFactory sqlSessionFactory = null; //初始化创建SqlSessionFactory对象 static { try { //读取mybatis-config.xml文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //初始化mybatis,创建SqlSessionFactory类的实例 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }catch(Exception e) { e.printStackTrace(); } } //获取SqlSession对象的静态方法 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } //获取SqlSessionFactory的静态方法 public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } }
/MyBatis/src/com/web/mybatis/test/StudentTest.java
package com.web.mybatis.test; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.web.mybatis.domain.Clazz; import com.web.mybatis.domain.Student; import com.web.mybatis.factory.FKSqlSessionFactory; public class StudentTest { public static void SelectStudentTest() { //获得Session实例 SqlSession session = FKSqlSessionFactory.getSqlSession(); //查询User对象 List<Student> list = session.selectList("com.web.mybatis.mapper.StudentMapper.selectStudent"); for(Student row : list) { System.out.println(row.toString()); } //提交事务 session.commit(); //关闭Session session.close(); } public static void SelectClazzTest() { //获得Session实例 SqlSession session = FKSqlSessionFactory.getSqlSession(); //查询User对象 List<Clazz> list = session.selectList("com.web.mybatis.mapper.StudentMapper.selectClazz"); for(Clazz clazz : list) { System.out.println(clazz.ClazzToString()); } //提交事务 session.commit(); //关闭Session session.close(); } public static void main(String[] args) { // SelectStudentTest(); SelectClazzTest(); } }