目錄結構
mybatis.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>
<!-- 給User類起別名 -->
<typeAliases>
<!--
type:某一個實體類的具體路徑
alias:具體路徑的別名
-->
<typeAlias type="entity.User" alias="User"></typeAlias>
</typeAliases>
<!-- default與id值保持一致 -->
<environments default="mysql">
<environment id="mysql">
<!-- transactionManager:代表的是數據庫的事務 -->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource:代表的是數據源 -->
<dataSource type="POOLED">
<!-- 配置數據庫驅動 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
<!-- 配置url -->
<property name="url" value="jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8"></property>
<!-- 配置用戶名 -->
<property name="username" value="root"></property>
<!-- 配置密碼 -->
<property name="password" value=""></property>
</dataSource>
</environment>
</environments>
<!--
可以通過mapper標籤將主配置文件mybatis.xml與局部配置文件關聯起來
resource:代表的是局部配置文件的路徑
-->
<mappers>
<mapper resource="dao/UserDao.xml"></mapper>
</mappers>
</configuration>
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 namespace="dao.UserDao">
<!-- id:代表的是唯一標識符 -->
<select id="selectAll" resultType="User">
select * from user;
</select>
<!-- 通過id查詢 -->
<select id="selectById" parameterType="int" resultType="User">
select * from user where id = #{0};
</select>
<!-- 多個值查詢 -->
<select id="selectByConditions" parameterType="Map" resultType="User">
select * from user where id = #{id} and password = #{password};
</select>
<!--
添加數據
在mybatis中,增刪改不需要指定返回類型,因爲默認返回類型爲int類型
-->
<insert id="addUser" parameterType="Map">
insert into user values(#{id}, #{username}, #{password});
</insert>
<!--
修改數據
1、不需要指定返回值類型,默認int
2、需要指定參數類型
-->
<update id="updateUser" parameterType="Map">
update user set username = #{username}, password = #{password} where id = #{id};
</update>
<!--
通過指定的id刪除數據
1、不需要指定返回值類型,默認int
2、需要指定參數類型(int)
-->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{0};
</delete>
<!--
動態查詢
傳參數可以任意傳,傳哪幾個都行
如果一個參數也不傳,那麼只執行1=1,確保不會報錯
-->
<select id="dynamicSelect" parameterType="Map" resultType="User">
select * from user where 1=1
<if test="id!=null">
and id = #{id}
</if>
<if test="username!=null">
and username = #{username}
</if>
<if test="password!=null">
and password = #{password};
</if>
</select>
</mapper>
User.java
package entity;
public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Users [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
UserDao.java
package dao;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.Null;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.mysql.cj.Session;
import entity.User;
public class UserDao {
private static SqlSession session = null;
@Before
public void init() {
try {
// 1、需要執行sql語句(SqlSession--->SqlSessionFactory--->SqlSessionFactoryBuilder)
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
// 將mybatis.xml主配置文件變成字節輸入流
InputStream is = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory ssf = sfb.build(is);
session = ssf.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
// 不帶條件的查詢
@Test
public void selectAll() throws IOException {
/*
* 2、調用SqlSession類中的方法來執行sql語句
* 調用方式:namespace + "." + id
*/
List<User> list = session.selectList("dao.UserDao.selectAll");
// 打印結果
for(User user : list) {
System.out.println(user);
}
}
// 通過id查詢
@Test
public void selectById() {
User user = session.selectOne("dao.UserDao.selectById", 2);
System.out.println(user);
}
// 多個條件查詢
@Test
public void selectByConditions() {
Map<String, Object> paramter = new HashMap<String, Object>();
paramter.put("id", 1);
paramter.put("password", "aaa");
List<User> list = session.selectList("dao.UserDao.selectByConditions", paramter);
System.out.println(list);
}
// 添加數據
@Test
public void addUser() {
Map<String, Object> paramter = new HashMap<String, Object>();
paramter.put("id", 3);
paramter.put("username", "王五");
paramter.put("password", "ccc");
int count = session.insert("dao.UserDao.addUser", paramter);
// 需要提交事務
session.commit();
if(count >= 1) {
System.out.println("數據添加成功");
} else {
System.out.println("數據添加失敗");
}
}
// 修改數據
@Test
public void updateUser() {
Map<String, Object> paramter = new HashMap<String, Object>();
paramter.put("id", 2);
paramter.put("username", "jack");
paramter.put("password", "ddd");
int count = session.update("dao.UserDao.updateUser", paramter);
// 提交事務
session.commit();
System.out.println(count);
}
// 刪除數據
@Test
public void deleteUser() {
int count = session.delete("dao.UserDao.deleteUser", 3);
// 提交事務
session.commit();
System.out.println(count);
}
// 動態查詢
@Test
public void dynamicSelect() {
Map<String, Object> paramter = new HashMap<String, Object>();
paramter.put("id", 2);
paramter.put("username", "jack");
paramter.put("password", "ddd");
List<User> list = session.selectList("dao.UserDao.dynamicSelect", paramter);
for(User user : list) {
System.out.println(user);
}
}
}