Mybatis的增删改查CRUD
- 准备工作:
1根据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>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<!--将全限定名命名为User-->
<typeAlias alias="user" type="com.ghf.jxxd.entity.User"/>
</typeAliases>
<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?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ghf/jxxd/dao/UserMapper.xml"/>
</mappers>
</configuration>
2同样根据mybatis文档写一个获取sqlsession对象的工具类:
package com.ghf.jxxd.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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
/*如果要设置自动提交事务,可以在opensession中设置为true*/
return sqlSessionFactory.openSession();
}
}
- 创建实体类
package com.ghf.jxxd.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
//已经安装lombok插件
@Data
@AllArgsConstructor
public class User {
private String name;
private String id;
private String password;
}
- 在dao层写接口和xml文件
package com.ghf.jxxd.dao;
import com.ghf.jxxd.entity.User;
import java.util.List;
import java.util.Map;
/**
* @author 81139
*/
public interface UserDao {
//查询全部用户
List<User> getUserList();
//根据id查询用户
User getUserById(int id);
//删除用户
int deleteUser(int id);
//增加一个用户
int addUser(User user);
//修改
int updateUser(User user);
//使用Map集合增加用户
int addUser2(Map<String,Object> map);
//模糊查询
List<User> find(Map<String,Object> map);
/*分页查询*/
List<User> getUserLimit(Map<String,Integer> map);
}
<?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.ghf.jxxd.dao.UserDao">
<resultMap id="baseUser" type="com.ghf.jxxd.entity.User">
<result column="pwd" property="password"></result>
</resultMap>
<sql id="condition">
<trim suffixOverrides="and">
<where>
<if test="name!=null">
name like '%${name}%' and
</if>
</where>
</trim>
</sql>
<!--查询所有用户-->
<select id="getUserList" resultMap="baseUser">
select * from user;
</select>
<!--删除用户-->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id};
</delete>
<!--增加用户-->
<insert id="addUser" parameterType="user">
insert into user (name,pwd) values (name=#{name},pwd=#{pwd});
</insert>
<!--修改用户信息-->
<update id="updateUser" parameterType="user">
update user set name=#{name},pwd=#{pwd} where id=#{id};
</update>
<!--通过集合方式增加用户-->
<insert id="addUser2" parameterType="java.util.Map">
insert into user (name,sex,pwd) values (#{name},#{sex},#{pwd});
</insert>
<!--分页查询-->
<select id="getUserLimit" parameterType="map" resultMap="baseUser">
select * from user limit #{startIndex},#{pageIndex};
</select>
</mapper>
最后可以创建测试类来进行测试:
package com.ghf.jxxd.dao;
import com.ghf.jxxd.entity.User;
import com.ghf.jxxd.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserDaoTest {
/*查询所有用户*/
@Test
public void Test(){
SqlSession sqlSession = MybatisUtils.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 getUserLimitTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex",0);
map.put("pageIndex",2);
List<User> userLimit = mapper.getUserLimit(map);
for(User u:userLimit){
System.out.println(u);
}
}
/*删除用户*/
@Test
public void deleteUserTest(){
SqlSession sqlSession2 = MybatisUtils.getSqlSession();//获取执行sql执行的对象
UserDao mapper2 = sqlSession2.getMapper(UserDao.class);//通过sql对象获取mapper接口
int i = mapper2.deleteUser(16);
if (i>0){
System.out.println("删除成功!");
}
sqlSession2.commit();
sqlSession2.close();
}
/*添加用户*/
@Test
public void addUserTest(){
SqlSession sqlSession2 = MybatisUtils.getSqlSession();//获取执行sql执行的对象
UserDao mapper2 = sqlSession2.getMapper(UserDao.class);//通过sql对象获取mapper接口
int i = mapper2.updateUser(new User("ghf","111","2"));
sqlSession2.commit();
sqlSession2.close();
}
/*以map集合方式添加用户*/
@Test
public void addUser2Test(){
SqlSession sqlSession2 = MybatisUtils.getSqlSession();//获取执行sql执行的对象
UserDao mapper2 = sqlSession2.getMapper(UserDao.class);//通过sql对象获取mapper接口
HashMap<String, Object> map = new HashMap<>();
map.put("name","qqq");
map.put("sex","男");
map.put("pwd","123");
mapper2.addUser2(map);
sqlSession2.commit();
sqlSession2.close();
}
/*模糊查询*/
@Test
public void findUserTest(){
SqlSession sqlSession2 = MybatisUtils.getSqlSession();//获取执行sql执行的对象
UserDao mapper2 = sqlSession2.getMapper(UserDao.class);//通过sql对象获取mapper接口
HashMap<String, Object> map = new HashMap<>();
map.put("name","q");
List<User> users = mapper2.find(map);
for(User u:users){
System.out.println(u);
}
}
}
增删改查就是这些内容