一、使用MyBatis对表执行CRUD操作——基于XML的实现
1.sql映射xml文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,对statement的信息进行分类管理 -->
<!-- 注意:在mapper代理是,它具有特殊重要的作用 -->
<mapper namespace="test" >
<!-- 根据用户ID查询用户信息 -->
<!-- select:表示一个mappedStatement对象 -->
<!-- id:statement的唯一标识 -->
<!-- #{}:标识一个占位符? -->
<!-- #{id}:里面的id表示输入的参数名称,如果该参数是简单类型,那么#{}里面的参数名称可以任意 -->
<!-- parameterType:输入参数得java类型 -->
<!-- resultType:输出结果的所映射的Java类型(单条记录所对应的java类型) -->
<select id="findUserById" parameterType="int" resultType="me.mybatis.po.User">
select * from user where id=#{id}
</select>
<!-- 根据用户名称模糊查询用户列表 -->
<!-- ${}:表示一个sql的连接符 -->
<!-- ${value}:里面的value表示输入参数的参数名称,如果该参数是简单类型,那么${}里面的参数名称必须是value -->
<!-- ${}这用写法存在sql注入的风险,所以要谨慎使用,但是在一些场景下,必须要使用${},比如排序时,动态传入排序的列名,${}会不加解释 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="me.mybatis.po.User">
select * from user where username like '%${value}%'
</select>
<!-- 添加用户信息 -->
<insert id="insertUser" parameterType="me.mybatis.po.User" >
<selectKey keyProperty="id" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)values(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 添加用户信息 -->
<!-- 主键返回之自增主键 -->
<!-- selectKey:查询主键,在标签内需要输入查询主键的SQL -->
<!-- order:指定查询主键的sql和insert语句的执行顺序,相当于insert语句来说 -->
<!-- LAST_INSERT_ID:该函数是mysql的函数,获取自增主键的id,它必须配合insert语句一起使用 -->
<insert id="insertUser2" parameterType="me.mybatis.po.User" >
<selectKey keyProperty="id" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)values(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 自增主键之UUID -->
<insert id="insertUser3" parameterType="me.mybatis.po.User" >
<!-- 当主键不是自增时,此时要获取id需要先通过数据库查询UUID,赋值给id属性,然后在进行插入操作,因此selectkey的order属性应为before -->
<selectKey keyProperty="id" resultType="String" order="BEFORE">
select UUID()
</selectKey>
insert into user(id,username,birthday,sex,address)values(#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 删除操作 -->
<delete id="deleteUser" parameterType="java.lang.Integer" >
delete from user where id=#{id}
</delete>
<!-- 更新操作 -->
<update id="updateById" parameterType="me.mybatis.po.User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
select last_insert_ID()
</selectKey>
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
</mapper>
2.测试代码
package me.mybatis.test;
import java.io.InputStream;
import java.util.Date;
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.Before;
import org.junit.Test;
import me.mybatis.po.User;
public class test01 {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
//取出配置文件
//全局配置文件的路径
String resource="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlsession工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() {
//得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//调用映射mapper的id为finUserById的select
//第一个参数:表示statement的唯一表示namespace.id,第二个参数表示传入参数
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
sqlSession.close();
}
//进行添加测试
@Test
public void testinsert() {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("小明明");
user.setAddress("上海");
//调用SqlSession的增删改查方法
//第一个参数表示statement的唯一标识,第二个参数表示值
int result = sqlSession.insert("test.insertUser", user);
System.out.println("返回主键为:"+user.getId());
sqlSession.commit();
System.out.println("操作成功"+result);
//关闭资源
sqlSession.close();
}
//修改测试
@Test
public void testUpdate() {
//创建SQLSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setId(38);
user.setUsername("小明");
user.setBirthday(new Date());
user.setSex("2");
user.setAddress("北京");
//调用SqlSession的增删改查方法
//第一个参数表示statement的唯一标识,第二个参数表示值
int result = sqlSession.update("test.updateById",user);
sqlSession.commit();
System.out.println("操作成功"+result);
//关闭资源
sqlSession.close();
}
//删除测试
@Test
public void testDelete(){
SqlSession sqlSession = sqlSessionFactory.openSession();
//调用SqlSession的增删改查方法
//第一个参数表示statement的唯一标识,第二个参数表示值
int result = sqlSession.delete("test.deleteUser", 35);
sqlSession.commit();
System.out.println("操作成功"+result);
//关闭资源
sqlSession.close();
}
}
737


之配置文件实现crud操作&spm=1001.2101.3001.11974&articleId=87392143&d=1&t=3&u=f7156bf100b446f9a3b13f5f605368b8)

被折叠的 条评论
为什么被折叠?



