Mybatis官方檔案 :
http://www.mybatis.org/mybatis-3/zh/index.html
GitHub :https://github.com/mybatis/mybatis-3
CREATE DATABASE `mybatis`;
USE `mybatis`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`name`,`pwd`) values (1,'張三','123456'),(2,'李四','abcdef'),(3,'王五','987654');
<dependencies>
<!--mysql驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit 測試包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
該組態檔主要是設定連線mysql的基本資訊及註冊mapper(具體設定參考官方檔案)
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xiezhr/Dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
檢視官方檔案,我們這裡要封裝一個工具類生成SqlSession物件,SqlSession用於後面的執行sql
package com.xiezhr.util;
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 MysqlUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
各個屬性得命名必須與資料庫欄位一一對應,具體如下所示,資料庫對應欄位為id,name,pwd
package com.xiezhr.pojo;
public class User {
private int id;
private String name;
private String pwd;
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
該介面對應原來的dao,具體程式碼如下
package com.xiezhr.dao;
import com.xiezhr.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
}
由於我們使用了mybatis,所以這的xml檔案相當於我們原來dao得實現類daoimpl。namespace屬性對應著介面,不能寫錯,
<?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.xiezhr.dao.UserMapper">
<select id="getUserList" resultType="com.xiezhr.pojo.User">
select * from mybatis.user;
</select>
</mapper>
package com.xiezhr.dao;
import com.xiezhr.pojo.User;
import com.xiezhr.util.MysqlUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class TestUserDao {
@Test
public void selectUser(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
}
}
經過測試後輸出測試結果
D:\Java\jdk1.8.0_91\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=54576:D:\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar;D:\JetBrains\IntelliJ IDEA 2019.3.3\plugins\junit\lib\junit5-rt.jar;D:\JetBrains\IntelliJ IDEA 2019.3.3\plugins\junit\lib\junit-rt.jar;D:\Java\jdk1.8.0_91\jre\lib\charsets.jar;D:\Java\jdk1.8.0_91\jre\lib\deploy.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_91\jre\lib\javaws.jar;D:\Java\jdk1.8.0_91\jre\lib\jce.jar;D:\Java\jdk1.8.0_91\jre\lib\jfr.jar;D:\Java\jdk1.8.0_91\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_91\jre\lib\jsse.jar;D:\Java\jdk1.8.0_91\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_91\jre\lib\plugin.jar;D:\Java\jdk1.8.0_91\jre\lib\resources.jar;D:\Java\jdk1.8.0_91\jre\lib\rt.jar;F:\workspace_idea\Mybatis-test\mybatis-01\target\test-classes;F:\workspace_idea\Mybatis-test\mybatis-01\target\classes;D:\maven\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar;D:\maven\repository\org\mybatis\mybatis\3.5.2\mybatis-3.5.2.jar;D:\maven\repository\junit\junit\4.12\junit-4.12.jar;D:\maven\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.xiezhr.dao.TestUserDao,selectUser
Tue Apr 14 22:54:48 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
User{id=1, name='張三', pwd='322334'}
User{id=2, name='李四', pwd='123456'}
User{id=3, name='王五', pwd='123456'}
擴充套件
public interface UserMapper {
//根據ID查詢使用者
User selectUserById(int id);
}
<mapper namespace="com.xiezhr.dao.UserMapper">
<select id="selectUserById" parameterType="int" resultType="com.xiezhr.pojo.User">
select * from mybatis.user where id = #{id}
</select>
</mapper>
@Test
public void selectUserByid(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
System.out.println(user);
}
測試通過
Wed Apr 15 23:08:00 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
User{id=1, name='張三', pwd='322334'}
public interface UserMapper {
//根據使用者名稱密碼查詢使用者資訊
User selectUserByNP(@Param("name") String name,@Param("pwd") String pwd);
}
<mapper namespace="com.xiezhr.dao.UserMapper">
<select id="selectUserByNP" resultType="com.xiezhr.pojo.User">
select * from mybatis.user where name=#{name} and pwd=#{pwd}
</select>
</mapper>
@Test
public void selectUserByNP(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserByNP("張三","322334");
System.out.println(user);
}
測試成功
Wed Apr 15 23:24:02 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
User{id=1, name='張三', pwd='322334'}
以上通過使用者名稱和密碼查詢使用者,傳參還可以通過萬能的map實現,具體程式碼如下
public interface UserMapper {
//根據使用者名稱和密碼查詢使用者資訊
User queryUserByNP(Map<String,Object> map);
}
<mapper namespace="com.xiezhr.dao.UserMapper">
<select id="queryUserByNP" parameterType="map" resultType="com.xiezhr.pojo.User">
select * from mybatis.user where name=#{name} and pwd=#{pwd}
</select>
</mapper>
@Test
public void queryUserByNp(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","張三");
map.put("pwd","322334");
User user = mapper.queryUserByNP(map);
System.out.println(user);
}
string wildcardname = 「%smi%」;
list<name> names = mapper.selectlike(wildcardname);
<select id=」selectlike」>
select * from foo where bar like #{value}
</select>
string wildcardname = 「smi」;
list<name> names = mapper.selectlike(wildcardname);
<select id=」selectlike」>
select * from foo where bar like "%"#{value}"%"
</select>
public interface UserMapper {
//新增一條使用者資訊
int addUser(User user);
}
2.在UserMapper.xml 中寫insert 語句
<insert id="addUser" parameterType="com.xiezhr.pojo.User">
insert into mybatis.user values(#{id},#{name},#{pwd})
</insert>
@Test
public void addUser(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4, "大頭兒子", "123456");
mapper.addUser(user);
sqlSession.commit(); //增刪改一定要提交事務
sqlSession.close();
}
public interface UserMapper {
//修改一條記錄
int updateUserById(int id);
}
2.在UserMapper.xml 中寫insert 語句
<update id="updateUserById" parameterType="int">
update mybatis.user set name='小頭爸爸' where id=#{id}
</update>
@Test
public void updateUserById(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUserById(4);
sqlSession.commit(); //增刪改一定要提交事務
sqlSession.close();
}
public interface UserMapper {
//根據ID刪除一條記錄
int deleteUserById(int id);
}
}
2.在UserMapper.xml 中寫insert 語句
<delete id="deleteUserById" parameterType="int">
delete from mybatis.user where id=#{id}
</delete>
@Test
public void deletUserById(){
SqlSession sqlSession = MysqlUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUserById(4);
sqlSession.commit(); //增刪改一定要提交事務
sqlSession.close();
}
注意
可能出現問題說明:Maven靜態資源過濾問題
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
在靜態資源的過濾中,基本的元素有三種: