1、建立工程,使用MySQL数据库
2、导入mybatis的jar包,数据库连接jar包
3、src下新建mybatis的全局配置文件SqlMapperConfig.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>
<!-- 引入数据库连接的信息 -->
<properties resource="db.properties"></properties>
<!-- 别名设置,扫包方式为类设置别名,xml中使用时直接写类型即可(首字母大小写都可以),不用加入包路径了 -->
<typeAliases>
<package name="cn.bfule.po" />
</typeAliases>
<!-- mybatis运行环境,不用理会,到跟spring整合后无效 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--导入mapper。xml,通过扫包的方式 配置mapper。xml文件 ,再与spring整合后无用配置 -->
<mappers>
<package name="cn.bfulle.mapper" />
</mappers>
</configuration>
4、操作数据库肯定得有数据库和表,编写pojo类来对应数据库中的表
5、编写mapper.java接口和mapper.xml文件(mapper.java和mapper.xml文件名要一致且在同一包名目录下),mapper.java中的方法要与mapper.xml文件定义的statement对应,mapper.xml文件的namespace就是mapper.java接口的全路径(报名+类名)
UserMapper.java
package cn.bfulle.mapper;
import java.util.List;
import cn.bfule.po.User;
import cn.bfule.po.UserCustom;
import cn.bfule.po.UserQueryVo;
public interface UserMapper {
/**
* 说明:
* 方法名是mapper.xml中statement的id
* 方法的参数是mapper.xml中statement的parameterType
* 方法返回值是mapper.xml中statement的resultType
*/
public User queryById(String id) throws Exception;
public List<UserCustom> query(UserQueryVo userQueryVo) throws Exception;
public void addUser(User user) throws Exception;
public void deleteUser(String id) throws Exception;
public void modifyUser(User user) throws Exception;
}
Usermapper.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">
<mapper namespace="cn.bfulle.mapper.UserMapper"><!--namespace就是mapper.java接口的全路径(报名+类名) -->
<!-- id就是接口中的方法名,parameterType是方法的参数类型,resultType方法的返回值类型 -->
<select id="queryById" parameterType="string" resultType="user">
select * from user where id=#{id}
</select>
<sql id="querySql">
<where>
<if test="userCustom!=null">
<if test="userCustom.id!=null and userCustom.id!=''">
and id=#{userCustom.id}
</if>
<if test="userCustom.username!=null and userCustom.username!=''">
and username like #{userCustom.username}
</if>
<if test="userCustom.password!=null and userCustom.password!=''">
and password=#{userCustom.password}
</if>
</if>
</where>
</sql>
<select id="query" parameterType="UserQueryVo" resultType="userCustom">
select * from user
<include refid="querySql"></include>
</select>
<insert id="addUser" parameterType="user">
insert into user (id,username,password,age,birthday,sex) value(#{id},#{username},#{password},#{age},#{birthday},#{sex})
</insert>
<delete id="deleteUser" parameterType="string">
delete from user where id=#{id}
</delete>
<update id="modifyUser" parameterType="user">
update user set id=#{id},username=#{username},password=#{password},age=#{age},birthday=#{birthday},sex=#{sex} where id=#{id}
</update>
</mapper>
6、测试,由于SqlSession线程不安全,所以必须定义在方法体内
package cn.bfulle.mapper;
import static org.junit.jupiter.api.Assertions.fail;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.UUID;
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.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import cn.bfule.po.User;
import cn.bfule.po.UserCustom;
import cn.bfule.po.UserQueryVo;
class UserMapperTest {
static SqlSessionFactory factory = null;
@BeforeAll
static void setUpBeforeClass() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("SqlMapperConfig.xml");
factory = new SqlSessionFactoryBuilder().build(inputStream);
}
@BeforeEach
void setUp() throws Exception {
}
@Test
void testQueryById() throws Exception {
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.queryById("25409761-72e8-43ca-bf34-d6091862cb44");
System.out.println(user);
}
@Test
void testQuery() throws Exception {
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserQueryVo userQueryVo=new UserQueryVo();
UserCustom userCustom=new UserCustom();
//userCustom.setId("24016c63-5863-491a-9d71-2a068672dff0");
userCustom.setUsername("%张三%");
userCustom.setPassword("");
userQueryVo.setUserCustom(userCustom);
List<UserCustom> users = userMapper.query(userQueryVo);
System.out.println(users);
}
@Test
void testAddUser() throws Exception {
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user=new User(UUID.randomUUID().toString(), "张三", "123456", 22, new Date(), 1);
System.out.println(user);
userMapper.addUser(user);
sqlSession.commit();
}
@Test
void testDeleteUser() {
fail("Not yet implemented");
}
@Test
void testModifyUser() {
fail("Not yet implemented");
}
}