Mybatis框架开发(一)
mybatis的开发流程-helloworld
-
maven项目(jar)
-
配置依赖(POM)
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</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.20</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> <!--在测试环境下有效,其它环境不引入--> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.32</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.32</version> </dependency> </dependencies>
-
创建表
-
实体类–映射表
@Alias("Book") //实体类:别名 @Data @NoArgsConstructor @AllArgsConstructor public class Book { private Integer id; private String title; private Double price; private String author; }
-
规范数据的操作(定义数据库的CRUD): mapper
public interface IBookMapper {
void save(Book book);
void deleteById(int id);
void update(Book book);
List<Book> findAll();
}
-
配置框架:
- 配置mybatis-configuration.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"> <configuration> <!-- 读取数据源信息 --> <properties resource="mybatis/druid/druid.properties" /> <!-- 配置别名 --> <typeAliases> <package name="com.dyit.mybatis.entity" /> </typeAliases> <!--数据库的配置信息 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /><!--JDBC事务管理 --> <dataSource type="com.dyit.mybatis.util.MybatisDataSource"> <!---数据源 --> <property name="driverClassName" value="${druid.driver}" /> <property name="url" value="${druid.url}" /> <property name="username" value="${druid.username}" /> <property name="password" value="${druid.password}" /> </dataSource> </environment> </environments> <!--配置表和类的映射文件 --> <mappers> <mapper resource="mybatis/mapper/Book.mapper.xml" /> </mappers> </configuration>
-
配置数据源信息druid.properties
druid.url=jdbc:mysql://192.168.183.128:3306/ssm_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true druid.username=root druid.password=123 druid.driver=com.mysql.cj.jdbc.Driver
/** * 使用自定义数据源 * @author dyit * */ public class MybatisDataSource extends UnpooledDataSourceFactory { public MybatisDataSource() { this.dataSource = new DruidDataSource(); } }
-
配置表和类的映射,配置CRUD:sql : xxx.mapper.xml
-
配置namespace: 接口的全名–报名.接口名称
<mapper namespace="com.dyit.mybatis.mapper.IBookMapper" > </mapper>
-
配置表和类的映射关系
<!-- 配置类的属性和表中的字段的映射关系 --> <resultMap type="Book" id="BookMap"> <!-- 配置主键 --> <id property="id" column="book_id"/> <result property="title" column="book_title"/> <result property="price" column="book_price"/> <result property="author" column="book_author"/> </resultMap>
-
实现增删改查
<?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.dyit.mybatis.mapper.IBookMapper" > <resultMap type="Book" id="BookMap"> <id property="id" column="book_id"/> <result property="title" column="book_title"/> <result property="price" column="book_price"/> <result property="author" column="book_author"/> </resultMap> <insert id="save"> INSERT INTO book_tab(book_title,book_price,book_author) VALUES(#{title},#{price},#{author}) </insert> <delete id="deleteById"> DELETE FROM book_tab WHERE book_id=#{id} </delete> <update id="update"> UPDATE book_tab SET book_title=#{title},book_price=#{price},book_author=#{author} WHERE book_id=#{id} </update> <select id="findAll" resultMap="BookMap"> SELECT * FROM book_tab </select> </mapper>
-
-
代码测试(实现)
-
创建SqlSessionFactory对象
//读取mybatis-configuration.xml文件 Reader in = Resources.getResourceAsReader("mybatis/config/mybatis-configuration.xml"); //工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
-
打开SqlSession: 与数据库的会话
SqlSession sqlSession = sqlSessionFactory.openSession();
-
绑定接口
//绑定接口 IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);
-
业务代码
mapper.save(new Book(null, "西游记 ", 78.88, "吴承恩"));
-
事务提交,关闭会话
-
sqlSession.commit();
sqlSession.close();
-
可以将上述测试封装
package com.dyit.mybatis.util; import java.io.IOException; 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 lombok.extern.slf4j.Slf4j; @Slf4j public class MybatisUtil { private volatile static MybatisUtil instance; private SqlSessionFactory sqlSessionFactory; private MybatisUtil() { init(); } public static MybatisUtil getInstance() { if (instance == null) { synchronized (MybatisUtil.class) { if (instance == null) { instance = new MybatisUtil(); } } } return instance; } private void init() { try { this.sqlSessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("mybatis/config/mybatis-configuration.xml")); } catch (IOException e) { log.debug(e.getMessage()); e.printStackTrace(); } } public SqlSession openSession() { return this.sqlSessionFactory.openSession(); } }
测试类:
public class TestMybatis {
private MybatisUtil db = MybatisUtil.getInstance();
@Test
public void testUpdate() {
SqlSession session = db.openSession();
IBookMapper mapper = session.getMapper(IBookMapper.class);
Book book = mapper.findById(7);
mapper.update(book);
mapper.update(book);
session.commit();
session.close();
}
}
}
private MybatisUtil db = MybatisUtil.getInstance();
@Test
public void testUpdate() {
SqlSession session = db.openSession();
IBookMapper mapper = session.getMapper(IBookMapper.class);
Book book = mapper.findById(7);
mapper.update(book);
mapper.update(book);
session.commit();
session.close();
}
}
}
其中日志的配置文件
```java
log4j.rootLogger=debug,Console,Logfile
#Console output
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%n
log4j.appender.Logfile=org.apache.log4j.FileAppender
log4j.appender.Logfile.File=D:/logs/mybatis.log #日志文件目录
log4j.appender.Logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Logfile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%n
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG