创建工程是,创建的是maven工程
首先需要配置pom.xml中配置MyBatis的相关依赖
这些依赖我们可以直接去百度复制下来
4.0.0 com.cmj MyBatis0.0.1-SNAPSHOT MyBatis MyBatis org.mybatis mybatis3.5.0 mysql mysql-connector-java8.0.15 log4j log4j1.2.17
2、我们要创建对应的配置文件
一般我们把对应配置文件放在
这个文件下
db.properties配置的是我们对应数据库的账号密码及对应的IP等
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=UTC&useSSL=false username=root password=root
log4.properties配置的是生成log的相关数据
# Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration... log4j.logger.com.cmj.dao.StudentMapper=DEBUG log4j.logger.com.cmj.dao.TeacherMapper=DEBUG # Console output... 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为相关的所有的配置
我们首先要注意的是,对应的配置顺序不能打乱,需要按照要求进行
properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
如果没有的,可以直接省略,但是不能随意调换其他配置的顺序
其中:
-
mapper配置:配置完成之后,我们就可以写对应的项目实现了:
1、定义类
首先我们先定义对应的类,比如我们这边创建的是老师类
在老师类中,我们定义了三个属性
private int id; private String name; private String passWord;
定义好属性之后,直接创建对应属性的get和set方法
他的无参构造与有参构造方法
重写他的toString方法
2、TeacherMapper.java
创建对应接口:(接口没有实现体,这个需要后续去实现这个接口时,重写这个方法)
这边创建了四个方法,分别对应增删改查四个方法
package com.cmj.dao; import com.cmj.entity.Teacher; public interface TeacherMapper { public Teacher selectByName(String name); public void add(Teacher teacher); public void updateTeacher(Teacher teacher); public void deleteByName(String name); }3、对应的TeacherMapper.xml这块的名字啥的,需要与接口名一致
如何实现接口与数据库进行绑定,执行
通过namespace与id做绑定进行的
其中namespace对应为接口所在的全类名,记住他的写进去的格式:
"com.cmj.dao.TeacherMapper"> 再下面的话,是对应各个增删改查的SQL语句的编写逻辑
例如我们的查询语句
select * from `teacher` where name = #{name}
这块的ID,对应的是我们接口中,查询的方法名一致
resultType结果类型,有些时候是可以省略不需要写上
#{name}这个表示为传入的name值直接可以获取到对应的值,但是这个一般是为单个的取值,如果多个的话,通过@param来注释,将对应的入参进行重新定义
如果没有进行注释的话,则会按照param1--param10按照顺序排列
4、测试我们的增删改查方法单元测试,我们都把对应测试代码放到我们的这个包下
package com.cmj; import java.io.IOException; 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; import org.junit.Test; import com.cmj.dao.StudentMapper; import com.cmj.dao.TeacherMapper; import com.cmj.entity.Student; import com.cmj.entity.Teacher; public class TeacherTest1 { @Test //接口式编程 public void selectByName() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); // 初始化mybatis,创建SqlSessionFactory类实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 创建Session实例 SqlSession session = sqlSessionFactory.openSession(); TeacherMapper mapper =session.getMapper(TeacherMapper.class);//传入接口类,为他生成一个代理类 Teacher teacher =mapper.selectByName("mini"); System.out.println(teacher); } @Test //接口式编程 public void add() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); // 初始化mybatis,创建SqlSessionFactory类实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 创建Session实例 SqlSession session = sqlSessionFactory.openSession(); TeacherMapper mapper =session.getMapper(TeacherMapper.class);//传入接口类,为他生成一个代理类 Teacher teacher =new Teacher(); teacher.setName("小的"); teacher.setPassWord("56565"); mapper.add(teacher); session.commit(); System.out.println(teacher); } @Test //接口式编程 public void updateTeacher() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); // 初始化mybatis,创建SqlSessionFactory类实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 创建Session实例 SqlSession session = sqlSessionFactory.openSession(); TeacherMapper mapper =session.getMapper(TeacherMapper.class);//传入接口类,为他生成一个代理类 Teacher teacher =new Teacher(); teacher.setName("dkd"); teacher.setPassWord("66565"); mapper.updateTeacher(teacher); session.commit(); System.out.println(teacher); } @Test //接口式编程 public void deleteByName() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); // 初始化mybatis,创建SqlSessionFactory类实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 创建Session实例 SqlSession session = sqlSessionFactory.openSession(); TeacherMapper mapper =session.getMapper(TeacherMapper.class);//传入接口类,为他生成一个代理类 mapper.deleteByName("mini"); session.commit(); } }我们先说我们的查询
@Test //接口式编程 public void selectByName() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); // 初始化mybatis,创建SqlSessionFactory类实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 创建Session实例 SqlSession session = sqlSessionFactory.openSession(); TeacherMapper mapper =session.getMapper(TeacherMapper.class);//传入接口类,为他生成一个代理类 Teacher teacher =mapper.selectByName("mini"); System.out.println(teacher); }首先,我们需要先用@Test对这个进行测试,注释了这个之后,后续才会认为是可以单元测试的
我们称之为这个小单元测试未接口式编程
直接通过接口名直接定义该方法,要记住,这些方法的话,都没有对应的返回值
这些前半部分的话,都是相同的内容
主要就是后面的这些内容,
TeacherMapper mapper =session.getMapper(TeacherMapper.class);//传入接口类,为他生成一个代理类
Teacher teacher =mapper.selectByName("mini");
这一块内容为实现为调用查询这个方法时的
执行后,可直接进行查询



