Mybatis官方文檔:
https://mybatis.org/mybatis-3/zh/index.html
1. 為什麼需要MyBatis
- 幫助程式員将資料存入到資料庫中
- 友善
- 傳統的JDBC代碼太複雜了,簡化,架構,自動化
- 不用MyBatis也可以,技術沒有高低之分
- 優點:
- 簡單易學
- 靈活
- sql和代碼的分離,提高了可維護性。
- 提供映射标簽,支援對象與資料庫的orm字段關系映射
- 提供對象關系映射标簽,支援對象關系組建維護
- 提供xml标簽,支援編寫動态sql
2、第一個Mybatis程式
思路:搭建環境 --> 導入MyBatis --> 編寫代碼 --> 測試
.2.1導入maven依賴配置
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
2.2目錄結構
2.3mybatis-config配置
<?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核心配置檔案-->
<configuration>
<properties resource="db-config.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserDao.xml" />
</mappers>
</configuration>
注意點:這裡url的value需要使用${jdbc.url}否則在編譯的時候回出現錯誤,value值回自動替換成www.example.com
2.4 db-config.properties配置
====
2.5 編寫mybatisUtil工具類
package com.zhangpan.utils;
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.apache.ibatis.session.SqlSessionManager;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtil {
static SqlSessionFactory sqlSessionFactory = null;
static {
try {
String MybatisConfig = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(MybatisConfig);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.6編寫dao接口
package com.zhangpan.mapper;
import com.zhangpan.pojo.User;
import java.util.List;
public interface UserDao {
public List<User> getUserList();
public void addUser(User user);
}
2.7編寫接口實作UserDao.xml(由原來的接口實作類變成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">
<!--namespace=綁定一個指定的Dao/Mapper接口-->
<mapper namespace="com.zhangpan.mapper.UserDao">
<select id="getUserList" resultType="com.zhangpan.pojo.User">
select * from USER
</select>
<select id="addUser" parameterType="com.zhangpan.pojo.User">
insert into USER (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address})
</select>
</mapper>
2.8 Junit測試
package com.zhangpan;
import com.zhangpan.mapper.UserDao;
import com.zhangpan.pojo.User;
import com.zhangpan.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Date;
import java.util.List;
public class test {
@Test
public void test1(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user:userList){
System.out.println(user);
}
sqlSession.close();
}
@Test
public void addUser_test(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User();
user.setUsername("關二爺");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("光棍屯18号");
userDao.addUser(user);
sqlSession.commit();
sqlSession.close();
}
}
3、通過配置檔案實作CURD
1. namespace**
namespace中的包名要和Dao/Mapper接口的包名一緻
選擇,查詢語句;
- id:就是對應的namespace中的方法名;
- resultType : Sql語句執行的傳回值;
- parameterType : 參數類型;
import com.zhangpan.pojo.User;
import org.omg.CORBA.PUBLIC_MEMBER;
import java.util.List;
import java.util.Map;
public interface UserDao {
public List<User> getUserList();
public void addUser(User user);
public void addUserMap(Map<String,Object> map);
public List<User> getUserLike(String username);
public List<User> getUserByLimit(Map<String,Integer> map);
public List<User> getUserByRowBounds();
}
userDao.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">
<!--namespace=綁定一個指定的Dao/Mapper接口-->
<mapper namespace="com.zhangpan.mapper.UserDao">
<resultMap id="UserMap" type="User">
<result column="username" property="username"/>
<result column="address" property="address"/>
</resultMap>
<select id="getUserList" resultType="User">
select * from USER
</select>
<select id="addUser" parameterType="User">
insert into USER (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address})
</select>
<select id="addUserMap" parameterType="map">
insert into USER (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address})
</select>
<select id="getUserLike" parameterType="String" resultMap="UserMap">
select * from USER where username like "%"#{username}"%"
</select>
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
select * from user limit #{startIndex},#{pageSize}
</select>
<select id="getUserByRowBounds" resultMap="UserMap">
select * from user
</select>
</mapper>
測試類
package com.zhangpan;
import com.zhangpan.mapper.UserDao;
import com.zhangpan.pojo.User;
import com.zhangpan.utils.MybatisUtil;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class test {
Logger logger = Logger.getLogger(test.class);
@Test
public void test1(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user:userList){
System.out.println(user);
}
sqlSession.close();
}
@Test
public void addUser_test(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User();
user.setUsername("關二爺");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("光棍屯18号");
userDao.addUser(user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void addUser_map(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
HashMap<String,Object> map = new HashMap<String, Object>();
map.put("username","python1223423");
map.put("sex","0");
map.put("birthday",new Date());
map.put("address","yangguangdadao 13hao");
userDao.addUserMap(map);
sqlSession.commit();
sqlSession.close();
}
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> users = userDao.getUserLike("python");
for (User user:users){
System.out.println(user);
}
logger.info("info:穩得一匹");
sqlSession.close();
}
@Test
public void getUserByLimit(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
HashMap<String,Integer> map = new HashMap<String, Integer>();
map.put("startIndex",0);
map.put("pageSize",3);
List<User> list = userDao.getUserByLimit(map);
for (User user:list){
System.out.println(user);
}
}
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
RowBounds rowBounds = new RowBounds(2,2);
List<User> userList = sqlSession.selectList("com.zhangpan.mapper.UserDao.getUserByRowBounds",null,rowBounds);
for (User user:userList){
System.out.println(user);
}
}
}