(Mybatis)Mybatis的增删改查

1、根据 id 查询用户信息

     映射文件:

           在User.xml 中添加      

<!-- 根据id获取用户信息 -->
<!-- 
   id: sql语句唯一标识
   parameterType: 指定传入参数类型
   resultType: 返回结果集类型
   #{}占位符: 起到占位作用,如果传入的是基本类型(String,long,double,int...),那么#{}中变量名称可以随意写。
 -->
<select id="findUserById" parameterType="java.lang.Integer" resultType="com.jadan.pojo.User">
	select * from user where id = #{id}
</select>

            parameterType:定义输入到sql 中的参数类型,#{id} 表示使用 preparedStatement 设置占位符并将输入变量 id传到sql 中。

            resultType:定义结果映射类型

     测试程序:

@Test
public void testFindUserById() throws Exception {
	// 核心配置文件名
	String resource = "SqlMapConfig.xml";
	// 通过流将核心配置文件读取进来
	InputStream inputStream = Resources.getResourceAsStream(resource);
	// 通过核心配置文件输入流来创建会话工厂
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
	// 通过会话工厂创建会话
	SqlSession openSession = factory.openSession();
		
	// 第一个参数: 所调用的sql语句 = namespace + . + sql的id
	// 第二个参数: 是传入参数的值
	User user = openSession.selectOne("test.findUserById", 1);
	System.out.println(user);
	// 关闭资源
	openSession.close();
}

2、根据用户名模糊查询用户

     映射文件:

           在 User.xml 中添加,

<!-- 
    若返回结果为集合,可以调用selectList方法,这个方法返回的结果就是一个集合,所以映射文件中应该配置成集合泛型的类型
    ${}拼接符: 字符串原样拼接, 如果传入的参数是基本类型,那么${}中变量名称必须是value
    注意: 拼接符有sql注入的风险,所以慎重使用
-->
<select id="findUserByUserName" parameterType="java.lang.String" resultType="com.jadan.pojo.User">
	select * from user where username like '%${value}%'
</select>

     测试程序:

@Test
public void testFindUserByUserName() throws Exception {
	// 核心配置文件名
	String resource = "SqlMapConfig.xml";
	// 通过流将核心配置文件读取进来
	InputStream inputStream = Resources.getResourceAsStream(resource);
	// 通过核心配置文件输入流来创建会话工厂
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
	// 通过会话工厂创建会话
	SqlSession openSession = factory.openSession();
		
	// 第一个参数: 所调用的sql语句 = namespace + . + sql的id
	// 第二个参数: 是传入参数的值
	List<User> list = openSession.selectList("test.findUserByUserName", "王");
	System.out.println(list);
	// 关闭资源
	openSession.close();
}


3、添加用户

     映射文件:

<!-- 
    #{}: 如果传入的是pojo类型,那么#{}中的变量名称必须是pojo中对应的属性.属性.属性...
-->
<insert id="insertUser" parameterType="com.jadan.pojo.User">
<!-- 执行select LAST_INSERT_ID()数据库函数,返回自增的主键
  keyProperty: 将返回的主键放入传入参数的Id中保存
  order: 当前函数相对于insert语句的执行顺序,在insert前执行的BEFORE,在insert后执行是AFTER
  resultType: id的类型,也就是keyProperties中属性的类型
-->
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
	  select LAST_INSERT_ID()
    </selectKey>
    insert into user(username, birthday, sex, address) 
    values(#{username}, #{birthday}, #{sex}, #{address})
</insert>

     测试程序:

@Test
public void testInsertUser() throws Exception {
	// 核心配置文件名
	String resource = "SqlMapConfig.xml";
	// 通过流将核心配置文件读取进来
	InputStream inputStream = Resources.getResourceAsStream(resource);
	// 通过核心配置文件输入流来创建会话工厂
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
	// 通过会话工厂创建会话
	SqlSession openSession = factory.openSession();
		
	User user = new User();
	user.setUsername("小明");
	user.setBirthday(new Date());
	user.setSex("1");
	user.setAddress("福建平潭");
		
	openSession.insert("test.insertUser", user);
	// 提交事务(mybatis会自动开启事务,但是不知道何时提交,所以需要手动提交事务)
	openSession.commit();
		
	System.out.println(user.getId()); // 获取添加时的id值
}

        也可以使用uuid实现主键,需要增加通过select uuid()得到uuid值

<insert  id="insertUser"parameterType="cn.itcast.mybatis.po.User">
    <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
        select uuid()
    </selectKey>

    insertinto user(id,username,birthday,sex,address)
        values(#{id},#{username},#{birthday},#{sex},#{address})

</insert>

注意:这里使用的order是“BEFORE”



4、删除用户

     映射文件:

<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="java.lang.Integer">
	delete from user where id = #{id}
</delete>

     测试程序:

@Test
public void testDeleteUserById() throws Exception {
	// 核心配置文件名
	String resource = "SqlMapConfig.xml";
	// 通过流将核心配置文件读取进来
	InputStream inputStream = Resources.getResourceAsStream(resource);
	// 通过核心配置文件输入流来创建会话工厂
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
	// 通过会话工厂创建会话
	SqlSession openSession = factory.openSession();
		
	openSession.delete("test.deleteUserById", 32);
		
	// 提交事务(mybatis会自动开启事务,但是不知道何时提交,所以需要手动提交事务)
	openSession.commit();	
}

5、修改用户

     映射文件:

<!-- 更新用户信息 -->
<update id="updateUser" parameterType="com.jadan.pojo.User">
	update user set username = #{username} where id = #{id}
</update>

     测试程序:

@Test
public void testUpdateUser() throws Exception {
	// 核心配置文件名
	String resource = "SqlMapConfig.xml";
	// 通过流将核心配置文件读取进来
	InputStream inputStream = Resources.getResourceAsStream(resource);
	// 通过核心配置文件输入流来创建会话工厂
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
	// 通过会话工厂创建会话
	SqlSession openSession = factory.openSession();
		
	User user = new User();
	user.setId(35);
	user.setUsername("小红");
		
	openSession.update("test.updateUser", user);
	// 提交事务(mybatis会自动开启事务,但是不知道何时提交,所以需要手动提交事务)
	openSession.commit();	
}

6、#{} 和 ${}

      #{} 占位符:占位

            如果传入的是基本数据类型,那么#{}中的变量名称可以随意写

            如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性.属性...   

     ${}拼接符:字符串原样拼接

            如果传入的是基本数据类型,那么${}中的变量名必须是value

            如果传入的参数是pojo类型,那么${}中的变量名必须是pojo中的属性.属性.属性...

            注意:使用拼接符可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格


7、parameterType 和 resultType

      parameterType:传入参数类型通过parameterType属性指定

      resultType:返回结果集类型通过resultType属性指定


下一篇:

猜你喜欢

转载自blog.csdn.net/jonez/article/details/80936079