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>