[学习笔记] MyBatis_04: CRUD操作

CRUD操作

ONGL表达式

Object-Graph Navigation Language, 对象-图形导航语言

ONGL语法:

基本语法: #{}

如:

employee
	id: 10
    name: Fighter
    age: 21
    dept: //Department类型
    	id: 1
        name: 开发部

如果上下文(环境)中对象为employee, 直接获取上下文属性值
#{name}: Fighter -> 当前上下文对象.getName()
#{age}: 21 -> 当前上下文对象.getAge()
#{dept.name}: 开发部 -> 当前上下文对象.getDept().getName()
总结:

如果当前上下文对象是JavaBean对象: #{属性名称}

如果当前上下文对象是Map对象: #{key}

如果当前上下文对象是简单类型对象: 直接取出参数值, 而和#{}中的内容无关

举例

基本类型

java代码:

    //Get one
    @Test
    public void testGet() throws Exception{
        SqlSession session = MyBatisUtil.getSqlSession();

        User user = session.selectOne("com.gx.mybatis.hello.UserMapper.get", 1l);
        System.out.println(user);

        session.close();
    }

UserMapper.xml代码:

	 <select id="get" parameterType="java.lang.Long" resultType="com.gx.mybatis.hello.User">
	 	SELECT * FROM t_user WHERE id = #{id}
	 </select>

此时#{}中可以为任意值, 不一定必须是id

JavaBean类型

java代码:

    //Get one
    @Test
    public void testGet() throws Exception{
        SqlSession session = MyBatisUtil.getSqlSession();
        
        //****************************
		User u = new User();
        u.setId(2l);
        //****************************
        
        User user = session.selectOne("com.gx.mybatis.hello.UserMapper.get", u);
        System.out.println(user);

        session.close();
    }

UserMapper.xml代码:

	 <select id="get" parameterType="java.lang.Long" resultType="com.gx.mybatis.hello.User">
	 	SELECT * FROM t_user WHERE id = #{id}
	 </select>

此时#{}中只能为id(属性值), 不能乱写

Update操作

java代码:

	@Test
	public void testUpdate(){
		User u = new User();
		u.setId(3l);
		u.setName("Fighter");
		u.setSalary(new BigDecimal("10000"));
		
		SqlSession session = MyBatisUtil.getSqlSession();
		session.update("com.gx.mybatis.hello.UserMapper.update", u);
		
        //****************************
		//提交事务
		session.commit();
        //****************************
		
		session.close();
	}

注意提交事务: session.commit()

UserMapper.xml代码:

	 <update id="update" parameterType="com.gx.mybatis.hello.User">
	 	UPDATE `t_user` SET name=#{name}, salary=#{salary} WHERE id=#{id}
	 </update>

Delete操作

java代码:

	@Test
	public void testDelete(){
		
		SqlSession session = MyBatisUtil.getSqlSession();
		session.delete("com.gx.mybatis.hello.UserMapper.delete", 3l);
		
		//提交事务
		session.commit();
		
		session.close();
	}

UserMapper.xml代码:

	 <delete id="delete" parameterType="java.lang.Long">
		DELETE FROM `t_user` WHERE id=#{id}
	 </delete>

Insert操作

java代码:

	@Test
	public void testInsert(){
		
		SqlSession session = MyBatisUtil.getSqlSession();
		User u = new User(3l, "GongXun", new BigDecimal("10000"));
		session.insert("com.gx.mybatis.hello.UserMapper.insert", u);
		
		//提交事务
		session.commit();
		
		session.close();
	}

UserMapper.xml代码:

	 <insert id="insert" parameterType="com.gx.mybatis.hello.User">
		INSERT INTO `t_user` (id, name, salary) VALUES (#{id}, #{name}, #{salary})
	 </insert>

获取自动生成的主键

**开发中, 我们经常会有这样一个需求: **
保存一条数据后, 需要得到刚刚保存的数据生成的主键的值

insert元素:
 	useGeneratedKeys属性: 是否需要返回自动生成的主键, 默认为false
 	keyProperty属性: 把自动生成的主键值设置到对象的哪一个属性上

java代码:

	@Test
	public void testInsert(){
		
		SqlSession session = MyBatisUtil.getSqlSession();
		
		//*********************************
		User u = new User();
		u.setName("GX");
		u.setSalary(new BigDecimal("10000"));
		System.out.println(u);
		session.insert("com.gx.mybatis.hello.UserMapper.insert", u);
		//提交事务
		session.commit();
		System.out.println(u);
		//*********************************
		
		session.close();
	}

UserMapper.xml代码:

	 <!-- 
	 	insert元素:
	 		useGeneratedKeys属性: 是否需要返回自动生成的主键
	 		keyProperty属性: 把自动生成的主键值设置到对象的哪一个属性上
	  -->
	 <insert id="insert" useGeneratedKeys="true" keyProperty="id"
	 		parameterType="com.gx.mybatis.hello.User">
		INSERT INTO `t_user` (name, salary) VALUES (#{name}, #{salary})
	 </insert>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值