mybatis一对多,和多对一的项目搭建
第一步:新建数据库表和导入依赖
1.新建student,classRoom,teacher表
2.导入依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
//可以把resources 和java 文件夹下的xml ,properties 文件打包到项目
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<!--为了在打包项目时,把java目录下的xml 打包进去 -->
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
第二步:新建pojo实体类,student,classRoom,teacher
//student 学生类 package pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data @AllArgsConstructor @NoArgsConstructor public class Student implements Serializable { private Integer id; private String name; private Integer tid; // 在这里做多对一,就是多个学生对应一个老师 private Teacher teacher; } //老师类 package pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class Teacher { private Integer id; private String name; private String sex; //一个老师教很多个班,这是一对多的关联 private List<ClassRoom> classRoomList; } //教室类 package pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class ClassRoom { private Integer id; private String roomNum; private Integer tid; }
第三步:新建mapper数据接口类,和对应xml文件
//student类的mapper接口 package mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import pojo.Student; import java.security.PublicKey; import java.util.List; public interface StudentMapper { // @Select("select * from student") public List<Student> getStudentList(); @Select("select * from student where id=#{id}") public Student getStudent(@Param("id") Integer id); } //studentMapper对应的mapperXml文件 <?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="mapper.StudentMapper"> <select id="getStudentList" resultMap="studentTeacher"> select s.id sid,s.name sname,t.name tname,t.sex tsex from student s,teacher t where s.tid=t.id </select> <resultMap id="studentTeacher" type="student"> <result column="sid" property="id"></result> <result column="sname" property="name"></result> <!-- 这里学生和老师是多对一的关系,这里用association --> <association property="teacher" javaType="teacher"> <result column="tname" property="name"></result> <result column="tsex" property="sex"></result> </association> </resultMap> </mapper> //teacher类的mapper接口 package mapper; import pojo.Teacher; import java.util.List; public interface TeacherMapper { public List<Teacher> getTeacherList(); } //teacherMapper接口对应的mapperXml文件 <?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="mapper.TeacherMapper"> <select id="getTeacherList" resultMap="teacherClassRoom"> select t.id tid,t.name tname,c.room_num croomNum from teacher t LEFT JOIN classRoom c on t.id=c.tid </select> <resultMap id="teacherClassRoom" type="teacher"> <result column="tid" property="id"></result> <result column="tname" property="name"></result> <!-- 这里是老师和教室一对多的关系,所以这里用 collection --> <collection property="classRoomList" ofType="classRoom"> <result column="croomNum" property="roomNum"></result> </collection> </resultMap> </mapper>
第四步:新建mybaits 工具类
package myUntil; 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.IOException; import java.io.InputStream; public class MybatisUntil { private static SqlSessionFactory sqlSessionFactory; static { try { //使用mybatis 第一步,获取sqlSessionFactory对象,这个对象时生成sqlSession的 String resource= "mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //有了sqlSessionFactory,我们既可以用sqlSessionFactory来open 一个个的sqlSession //sqlSession是可以操作数据库,他包含了所有的sql 语句操作 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
第五步:配置mybatis核心配置文件
<?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>
<!-- 配置日志文件 -->
<settings>
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="log4j"/>
<!-- 开启驼峰命名 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- <properties resource="db.properties"/>-->
<!--别名 -->
<typeAliases>
<!-- <!–设置User类的别名为user –>-->
<!-- <typeAlias type="pojo.User" alias="user"></typeAlias>-->
<!-- 设置pojo包下的所有实体类的别名为类名的首字母小写 -->
<package name="pojo"/>
</typeAliases>
<environments default="develoment">
<environment id="develoment">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://47.112.227.192:3306/spring?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--每一个mapper 都要在mybatis 的核心配置文件中注册 -->
<mappers >
<!-- 用resource映射的话就用全路径-->
<mapper resource="mapper/studentMapper.xml"></mapper>
<!-- <mapper resource="mapper/studentMapper.xml"></mapper>-->
<!-- 用class 映射的话,要用接口的类的全限定类名 -->
<!-- <mapper class="mapper.StudentMapper"></mapper>-->
<mapper resource="mapper/teacherMapper.xml"></mapper>
</mappers>
</configuration>
第六步:配置日志文件,log4j.properties
### 设置### log4j.rootLogger = debug,console,file ### 输出信息到控制抬 ### log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold = DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=E://logs/error.log ### log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File = ./logs/log.log log4j.appender.file.Append = true log4j.appender.file.MaxFilesSize=10mb log4j.appender.file.Threshold = DEBUG log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 日志输出级别 ### log4j.logger.org.mybatis =debug log4j.logger.java.sql =debug log4j.logger.java.sql.Statement =debug log4j.logger.java.sql.ResultSet =debug log4j.logger.java.sql.Preparedstatement =debug
第七步:测试
package test; import lombok.ToString; import mapper.StudentMapper; import mapper.TeacherMapper; import myUntil.MybatisUntil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import pojo.Student; import pojo.Teacher; import java.util.List; //测试带注解的接口 public class MyAnoTest { // 获取全部学生 @Test public void getStudentList(){ SqlSession sqlSession= MybatisUntil.getSqlSession(); StudentMapper studentMapper= sqlSession.getMapper(StudentMapper.class); List<Student> studentList = studentMapper.getStudentList(); System.out.println("studentList:"+studentList); } // 获取单个学生 @Test public void getStudent(){ SqlSession sqlSession= MybatisUntil.getSqlSession(); StudentMapper studentMapper= sqlSession.getMapper(StudentMapper.class); Student student = studentMapper.getStudent(1); System.out.println("student:"+student); } // 获取全部老师 @Test public void getTeacher(){ SqlSession sqlSession= MybatisUntil.getSqlSession(); TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class); List<Teacher> teacherList = teacherMapper.getTeacherList(); System.out.println("teacherList:"+teacherList); sqlSession.close(); } }

浙公网安备 33010602011771号