創建mybatis 項目
mybatis
MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關注SQL本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。
配置文件
MybatisConfig.xml
SSM中需要配置
- 數據url
- 數據庫連接池
- 映射文件
- 事務
在SpringBoot中整合到property中了
Mapper.xml
namespace
接口綁定 和接口
就可以不用寫DAO實現類,Mybatis會通過綁定自動找到要執行的sql語句。
resultMap
結果集對應到實體類的字段到屬性映射
xml 方式
傳統方式
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">
<!-- version: $Id$ -->
<configuration>
<!-- 引用JDBC屬性的配置文件 -->
<properties resource="database.properties" />
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事務管理 -->
<transactionManager type="JDBC" />
<!-- POOLED :JDBC連接對象的數據源連接池的實現,不直接支持第三方數據庫連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</dataSource>
</environment>
</environments>
<!-- ORM映射文件 -->
<mappers>
<!-- 註解的方式 -->
<mapper class="com.iflytek.dao.mapper.AccountMapper" />
<!-- XML的方式 -->
<mapper resource="com/mashibing/dao/xml/AccountMapper.xml" />
<!-- 這裏對於註解,還可以通過<package name="com.mashibing.dao.mapper"/> -->
</mappers>
</configuration>
Service 配置
public class AccountService {
public boolean insertAccount(Account account) {
boolean flag = false;
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try {
accountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
int result = accountMapper.insert(student);
if (result > 0) {
flag = true;
}
sqlSession.commit();
} finally {
sqlSession.close();
}
return flag;
}
public Student getAccountById(int id) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try {
AccountMapper AccountMapper = sqlSession.getMapper(AccountMapper.class);
return AccountMapper.selectByPrimaryKey(id);
} finally {
sqlSession.close();
}
}
public List<Student> getAllStudents() {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try {
StudentMapper StudentMapper = sqlSession.getMapper(StudentMapper.class);
return StudentMapper.selectByExample(new StudentExample());
} finally {
sqlSession.close();
}
}
public boolean updateAccount(Account account) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
boolean flag = false;
try {
AccountMapper AccountMapper = sqlSession.getMapper(AccountMapper.class);
int result = AccountMapper.updateByPrimaryKey(Account);
if (result > 0) {
flag = true;
}
sqlSession.commit();
} finally {
sqlSession.close();
}
return flag;
}
public boolean deleteAccount(int id) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
boolean flag = false;
try {
AccountMapper AccountMapper = sqlSession.getMapper(AccountMapper.class);
int result = AccountMapper.deleteByPrimaryKey(id);
if (result > 0) {
flag = true;
}
sqlSession.commit();
} finally {
sqlSession.close();
}
return flag;
}
}
與SpringBoot整合
引入依賴
<?xml version="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.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot03-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot03-mybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
mapper
<?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.mashibing.springboot.mapper.AccountMapper">
<resultMap type="com.mashibing.springboot.mapper.Account" id="BaseResultMap">
<result column="login_name" property="loginName"/>
<result column="password" property="password"/>
</resultMap>
<insert id="save" parameterType="Account">
INSERT INTO account(login_name,password)
VALUES
(
#{loginName},#{password}
)
</insert>
<select id="findAll" resultMap="BaseResultMap">
select * from account
</select>
</mapper>
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
##數據庫用戶名
spring.datasource.username=root
##數據庫密碼
spring.datasource.password=840416
# 用來實例化mapper接口
mybatis.type-aliases-package=com.mashibing.springboot.mapper
# 對應的sql映射
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
AccountMapper
package com.mashibing.springboot.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AccountMapper {
void save(Account account);
}
Account
public class Account {
private int id;
private String loginName;
private String password;
private String nickName;
private int age;
private String location;
private int banlance;
public int getId() {
顯示日誌
logging.level.com.mashibing.springboot.mapper=debug
註解查詢
@Select("select * from account1")
List<Account> findAll();
查找mapper接口
在入口加入 MapperScan
@MapperScan(“com.mashibing.springboot.mapper”)
public class Springboot03MybatisApplication {
每一個mapper接口上加入
@Mapper
public interface AccountMapper {
Mapper 自動生成
eclipse插件 市場搜素
MyBatis Generator
圖形化
https://github.com/zouzg/mybatis-generator-gui
把這個項目下載下來. 引入springtool. 運行
分頁查詢
依賴
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
Service
public Object findPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
AccountExample example = new AccountExample();
return mapper.selectByExample(example );
}
使用 mybatis generator gui
https://github.com/zouzg/mybatis-generator-gui
把這個項目下載下來. 引入springtool. 運行選項java Application
選擇MainUi
剩下的步驟 按照
https://github.com/zouzg/mybatis-generator-gui
這裏這麼做就行
點擊一下測試鏈接.
上面鏈接不成功.是因爲數據庫用的是mysql 但是我安裝的是MySql8 換一下就好了.
新建一張表 menu
四個字段 權限管理表
然後使用gui 生成代碼
MyBatisBaseDao.java 常用的基礎的查詢
MenuMapper.java
MenuExample.java 複雜查詢
Menu.java 實體類
MenuMapper.xml 映射xml
把這幾個文件拷貝到對應的項目裏面就行了
項目地址 springmvc04 這個
https://github.com/liudao01/SpringStudy