第一步:新建数据库表和导入依赖
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(); } }
原文:https://www.cnblogs.com/codinggege/p/13633137.html