深入浅出Mybatis(二)
程序员文章站
2022-06-21 15:03:07
...
下面我们再来做一个测试,根据用户名模糊查询用户的记录。
同理现在userMapper.xml中添加一个sql语句
<select id="selectUserByName" parameterType="java.lang.String" resultType="com.beyond.mybatis.po.User">
select * from user WHERE username like '%${value}%'
</select>
由于查询的结果可能返回多条所以我们这里使用selectList进行查询。
/**
* @author:kevin
* @Description: 根据用户名模糊查询
* @Date:12:08 2018/3/24
*/
@Test
public void findUserByName() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
SqlSession sqlSession = factory.openSession();
//通过sqlsession操作数据库
List user = sqlSession.selectList("test.selectUserByName","李");
System.out.println(user);
sqlSession.close();
}
输出:
小结:
parameterType:
在映射文件中指定输入参数的类型
resultType:
在映射文件中指定返回结果的类型。
#{}和${}的区别
#{}表示一个占位符,#{}接收简单类型的时候里面可以是任意参数#{value},#{id}等等,接收pojo对象值,通过OGNL读取队形中的属性值。
${}表示一个拼接符号,会引起sql注入,所以不建议使用。${}接收简单类型的时候里面只能是value,${value}.
selectOne查询单条记录。
selectList查询多条记录。
添加用户信息。
<!-- 添加用户
parameterType: 指定输入参数类型是pojo
-->
<insert id="insertUser" parameterType="com.beyond.mybatis.po.User">
insert into user(id,username,birthday,sex,addr) VALUES (#{id},#{username},#{birthday},#{sex},#{addr})
</insert>
/**
* @author:kevin
* @Description: 添加用户
* @Date:12:08 2018/3/24
*/
@Test
public void insertUser() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
SqlSession sqlSession = factory.openSession();
//通过sqlsession操作数据库
//List user = sqlSession.selectList("test.selectUserByName","李");
User user = new User();
user.setUsername("王小川");
user.setBirthday(new Date());
user.setSex("1");
user.setAddr("四川成都");
sqlSession.insert("test.insertUser",user);
//提交事务
sqlSession.commit();
sqlSession.close();
}
插入成功后查看数据库
自增主键返回
mysql自增主键,执行insert提交自动生成一个自增主键。通过mysql函数获取到刚插入记录的自增主键:
LAST_INSERT_ID(),insert之后调用。
需要修改insertUser的定义如下:
<insert id="insertUser" parameterType="com.beyond.mybatis.po.User">
<!--
将插入数据的主键返回,返回到user对象中
SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用于自增主键
keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
order:SELECT LAST_INSERT_ID()执行顺序,相对于insert来说它的执行顺序
-->
<selectKey keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user(id,username,birthday,sex,addr) VALUES (#{id},#{username},#{birthday},#{sex},#{addr})
</insert>
再次执行插入:
这次控制台打印出的id为 39。
非自增主键的返回:
如uuid主键的返回
需要将id类型修改为varchar,然后在insert之前获取uuid
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey>
删除用户:
<!-- 根据id删除 -->
<delete id="deleteUserById" parameterType="int">
DELETE FROM USER WHERE id=#{id}
</delete>
/**
* @author:kevin
* @Description: 根据id删除用户信息
* @Date:12:08 2018/3/24
*/
@Test
public void deleteUser() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
SqlSession sqlSession = factory.openSession();
//通过sqlsession操作数据库
sqlSession.delete("test.deleteUserById",39);
//提交事务
sqlSession.commit();
sqlSession.close();
}
更新用户:
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.beyond.mybatis.po.User">
UPDATE USER SET username=#{username},birthday=#{birthday},sex=#{sex} WHERE id=#{id}
</update>
/**
* @author:kevin
* @Description: 更新用户
* @Date:12:08 2018/3/24
*/
@Test
public void updateUser() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
SqlSession sqlSession = factory.openSession();
//通过sqlsession操作数据库
//List user = sqlSession.selectList("test.selectUserByName","李");
User user = new User();
user.setId(38);
user.setUsername("罗峰");
user.setBirthday(new Date());
user.setSex("1");
user.setAddr("四川成都");
sqlSession.update("test.updateUser",user);
//提交事务
sqlSession.commit();
sqlSession.close();
}
至此,Mybatis的入门程序差不多结束了。上一篇: python 图像 音频 转base64
下一篇: 颜值性能都不能少 市售高关注热销手机推荐
推荐阅读