MyBatis
- MyBatis是一个优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程
- MyBatis可以使用简单的XML或注解来配置和映射原生信息(即传统持久层操作),将接口和Java的实体类【普通的Java对象】映射成数据库中的记录。
1.搭建 maven项目
打包成war包有红叉是因为这个web项目没有web.xml
生成一下web.xml文件就ok了。
2.导入MyBatis项目jar包
-
maven仓库找MyBatis相关的jar包
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> </dependency>
3.创建数据库对应的实体类
package com.kuang.pojo;
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
public Books() {
}
public Books(int bookID, String bookName, int bookCounts, String detail) {
this.bookID = bookID;
this.bookName = bookName;
this.bookCounts = bookCounts;
this.detail = detail;
}
public int getBookID() {
return bookID;
}
public void setBookID(int bookID) {
this.bookID = bookID;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getBookCounts() {
return bookCounts;
}
public void setBookCounts(int bookCounts) {
this.bookCounts = bookCounts;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
@Override
public String toString() {
return "Books [bookID=" + bookID + ", bookName=" + bookName + ", bookCounts=" + bookCount + ", detail="
+ detail + "]";
}
}
4.编写Mapper接口
public interface BooksMapper {
List<Books> queryAllBooks();
}
5.编写Mapper.xml
-
MyBatis参考文档找xml配置以及示例
<?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="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
<mapper namespace="com.kuang.Mapper.BooksMapper"><!-- namespace:需要映射的接口的地址 --> <select id="queryAllBooks" resultType="Books"><!-- id:需要执行的方法名 resultType:结果集类型 --> select * from books </select> </mapper>
6.编写MyBatsis核心配置文件:mybatis-config.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="mysql.properties"></properties>
<typeAliases>
<package name="com.kuang.pojo"/><!-- 给实体类设置别名,这样在填写实体类的时候会自动拼接,不用写全限定类名 -->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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/kuang/mapper/BooksMapper.xml"/>
</mappers>
</configuration>
标签需要按照顺序排放(顶层结构),不然会报错
7.编写MyBatisUtil类
需要一个方法返回SqlSession,方便使用sqlSession
需要一个方法返回 T getMapper(Class mapper) ,方便获取接口引用并调用要执行的持久层操作方法
private static SqlSessionFactory sqlSessionFactory;
static {
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
public static <T> T getMapper(Class<T> mapper) {
SqlSession sqlSession = getSqlSession();
return sqlSession.getMapper(mapper);
}
8.大功告成,测试成功
public static void main(String[] args) {
BooksMapper mapper = MyBatisUtils.getMapper(BooksMapper.class);
List<Books> list = mapper.queryAllBooks();
System.out.println(list);
}