目录结构
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);
}
}
}