根据用户名称模糊查询
xml
<select id="findUserByName" parameterType="string" resultType="cn.mmz.mybatis.pojo.User">
select * from user where username like #{value}
</select>
java
public void finUserByNameTest()throws Exception{
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传入配置文件信息
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("test.findUserByName","小明");
System.out.println(list);
sqlSession.close();
}
但是查询的结果
其实模糊查询,查询到的%小明%
所以要用
:
表
示
拼
接
s
q
l
串
,
将
接
收
到
的
参
数
的
内
容
不
加
任
何
的
修
饰
拼
接
在
s
q
l
中
使
用
{}:表示拼接sql串,将接收到的参数的内容不加任何的修饰拼接在sql中 使用
:表示拼接sql串,将接收到的参数的内容不加任何的修饰拼接在sql中使用{} 拼接sql,引起sql注入
接收输入参数的内容,如果传入类型是简单类型,${}只能用value
查询用户小结
parameterType:指定输入参数类型
resultType: 指定输出结果类型
#{}表示一个占位符
${}表示一个拼接符号,会引入sql注入,不建议使用
selectOne和selectList
前者是查询出一条
后者查询多条进行映射
**添加用户 **
映射文件:在User里面配置sql的statement
<insert id="insertUser" parameterType="cn.mmz.mybatis.pojo.User">
insert into user (id,username,birthday,sex,address) value (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
mybatis通过OGNL获取对象的值
程序代码
@Test
public void insertUserTest()throws Exception{
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传入配置文件信息
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("马铭泽");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("吉林长春");
sqlSession.insert("test.insertUser",user);
sqlSession.commit();
sqlSession.close();
}
获取用户信息主键
也成为主键的返回
mysql的自增主键:执行insert提交之前,自动生成一个主键
通过mysql函数获取到刚刚插入的自增主键
LAST_INSERT_ID() 在insert之后调用
<selectKey keyProperty="id" order="AFTER"></selectKey>
只适用于自增组件
keyproperty将查询到的主键值设置到parameterType指定的对象的属性里面
order为执行顺序
还需要声明返回值类型int类型
然后就可以在控制台看到操作了
非自增主键返回
使用mysql uuid()的函数,就需要修改表中id的字段类型为string,长度设置为35位
执行思路:先查询uuid查询主键,将主键输入到sql语句中
要在之前
程序报错了。有两个点,第一是你如果使用uuid这种模式,必须要求id的字段类型为String,另一个是你在设置pojo对象的类型也要改成String。
删除用户
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
@Test
public void deleteUserTest()throws Exception{
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传入配置文件信息
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUser",39);
sqlSession.commit();
sqlSession.close();
}
更新用户
<update id="updateUser" parameterType="cn.mmz.mybatis.pojo.User">
update user set username = #{username},birthday = #{birthday},sex = #{sex},address = #{address}
where id = #{id}
</update>
@Test
public void updateUserTest()throws Exception{
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传入配置文件信息
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setId(35);
user.setUsername("咕噜");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("吉林长春");
sqlSession.update("test.updateUser",user);
sqlSession.commit();
sqlSession.close();
}