pom.xml
- "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.0modelVersion>
-
- <groupId>com.msbgroupId>
- <artifactId>TestMyBatis02artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <dependencies>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.28version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.5.6version>
- dependency>
-
- <dependency>
- <groupId>log4jgroupId>
- <artifactId>log4jartifactId>
- <version>1.2.17version>
- dependency>
-
- dependencies>
- project>
/resource
配置文件:
db.properties
- url=jdbc:mysql://localhost:3306/msb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
- driver=com.mysql.cj.jdbc.Driver
- username=root
- password=root
mybatis.xml
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "https://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <properties resource="db.properties">properties>
- <typeAliases>
-
- <package name="com.msb.pojo"/>
- typeAliases>
- <environments default="mysql">
- <environment id="mysql">
- <transactionManager type="JDBC">transactionManager>
- <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>
-
- <mapper resource="com/msb/mapper/*.xml">mapper>
- mappers>
-
- configuration>
log4j.properties
- #log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),
- # 优先级从高到低依次为:OFF>FATAL>ERROR>WARN>INFO>DEBUG>TRACE>ALL
- #日志级别越高,则输出的日志信息越少,反之越多
-
- #ALL: 最低等级的,用于打开所有日志记录。
- #TRACE: designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。
- #trace可以指定特定的文件日志信息(指定比DEBUG更细粒度的信息事件),如下案例所示 输出BookMapper 所包含的日志信息
-
- #DEBUG: 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
- #INFO: 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序
- # 运行的一些重要信息,但是不能滥用,避免打印过多的日志。
- #WARN: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
- #ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
- #FATAL: 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
- #OFF: 最高等级的,用于关闭所有日志记录。
- #如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,
- # 那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。
- # Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
-
- log4j.rootLogger = error , console
-
- log4j.logger.com.msb.mapper.BookMapper=TRACE
-
- ### console ###
- log4j.appender.console = org.apache.log4j.ConsoleAppender
- log4j.appender.console.Target = System.out
- log4j.appender.console.layout = org.apache.log4j.PatternLayout
- log4j.appender.console.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
实体类 book.java
- package com.msb.pojo;
-
- import java.util.LinkedList;
-
- public class Book {
- private int id;
- private String name;
- private String author;
- private double price;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
- public double getPrice() {
- return price;
- }
-
- public void setPrice(double price) {
- this.price = price;
- }
-
- public Book() {
- }
-
- public Book(int id, String name, String author, double price) {
- this.id = id;
- this.name = name;
- this.author = author;
- this.price = price;
- }
- }
mapper 接口类
- package com.msb.mapper;
-
- import com.msb.pojo.Book;
-
- import java.util.List;
-
- public interface BookMapper {
- /*public abstract */List selectAllBooks();
- public abstract Book selectOneBook(String name,String author);
- public abstract Book selectOneBook2(Book book);
- public abstract Book selectOneBook3(String name,Book book);
- public abstract int insertBook(Book book);
- }
接口实现类
BookMapper.xml
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.msb.mapper.BookMapper">
- <select id="selectAllBooks" resultType="Book">
- select * from t_book
- select>
- <select id="selectOneBook" resultType="Book">
- select * from t_book where name =#{param1} and author = #{param2}
- select>
- <select id="selectOneBook2" resultType="Book">
- select * from t_book where name =#{name} and author = #{author}
- select>
- <select id="selectOneBook3" resultType="Book">
- select * from t_book where name =#{param1} and author = #{param2.author}
- select>
- <insert id="insertBook">
- insert into t_book (id,name,author,price) values (#{id},#{name},#{author},#{price})
- insert>
- mapper>
测试类:
- package com.msb.test;
-
- import com.msb.mapper.BookMapper;
- import com.msb.pojo.Book;
- 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 Test3 {
- public static void main(String[] args) throws IOException {
- //指定核心配置文件的路径:
- String resource = "mybatis.xml";
- //获取加载配置文件的输入流:
- InputStream inputStream = Resources.getResourceAsStream(resource);
- //加载配置文件,创建工厂类
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- //通过工厂类获取一个会话:
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //动态代理模式?BookMapper mapper = BookMapper实现类
- BookMapper mapper = sqlSession.getMapper(BookMapper.class);
- Book b = new Book();
- b.setId(3);
- b.setName("红高粱");
- b.setAuthor("莫言");
- b.setPrice(46.7);
- int n = mapper.insertBook(b);
- if(n > 0){
- System.out.println("数据插入成功!");
- }
-
- //事务相关的操作:
- sqlSession.commit();
-
- //关闭资源:
- sqlSession.close();
- }
- }
总结:接口通过绑定配置文件的方式,封装了与数据库进行交互的过程。