MyBatis知识点复习-02其他入门操作
下面演示时只给出java代码和添加在在User.xml里面的mapper标签下的关键操作代码,其他的内容参见上篇(本教程是一环一环的,要接着看才行)
下一篇:MyBatis知识点复习-03Dao与Mapper代理实现
一.模糊查询操作
[${}]:表示拼接SQL字符串
[${value}]:表示要拼接的是简单类型参数。
注意:
简单类型:int,byte,short,long,float,double,char,boolean... String
1、如果参数为简单类型时,${}里面的参数名称必须为value(就是这5个字母,不可以改的)
2、${}会引起SQL注入,一般情况下不推荐使用。但是有些场景必须使用${},比如order by ${colname}
User.xml关键内容:
<select id="findUserByName" resultType="domain.User" parameterType="String">
select * from user where username like '%${value}%'
</select>
java文件:
package test;
import domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.InputStream;
public class TestUser {
@Test
public void Test(){
//读取全局配置文件
InputStream resourceAsStream = TestUser.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//获取工厂对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
User findUserByName = (User)sqlSession.selectOne("findUserByName", "张小");
System.out.println(findUserByName);
//关闭SqlSession
sqlSession.close();
}
}
上面因为查询张小查询到了一个数据,如果查询张有多条数据这时可以用sqlsession.selectList()方法,具体如下:
List<User> findUserByName = (sqlSession.selectList("findUserByName", "张"));
打印如下
二.插入删除更新操作
接下来为了方便书写修改后面的java代码我都是在Test方法内部的:
package test;
import domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class TestUser {
SqlSession sqlSession;
@Before
public void beforeFun(){
//读取全局配置文件
InputStream resourceAsStream = TestUser.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//获取工厂对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
sqlSession = build.openSession();
}
@Test
public void Test(){
//代码放在这
}
@After
public void AfterFun(){
//关闭SqlSession
sqlSession.close();
}
}
注意上面的@After与@Before是在Junit下的,不是其他包下面的,否则会失效
1.插入
清空Test里的代码添加下面代码:
User user = new User();
user.setId(19);
user.setBirthday(new Date());
user.setAddress("北京");
user.setUsername("李成");
user.setSex("男");
//insert的返回值影响的行数
int affectedRwows = sqlSession.insert("insertUser", user);
System.out.println(affectedRwows);
sqlSession.commit();//提交事务,否则会事务回滚
User.xml关键内容:
<insert id="insertUser" parameterType="domain.User">
insert into user (id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
</insert>
影响一行
2.删除
sqlSession.delete("deleteUserByName","李成");
sqlSession.commit();//提交事务,否则会事务回滚
清空Test里的代码添加下面代码:
<delete id="deleteUserByName" parameterType="String">
delete from user where username = #{vale}
</delete>
User.xml关键内容:
<delete id="deleteUserByName" parameterType="String">
delete from user where username = #{vale}
</delete>
3.修改
清空Test里的代码添加下面代码:
int update = sqlSession.update("updateUser", "王五");
System.out.println(update);
sqlSession.commit();
User.xml关键内容:
<update id="updateUser" parameterType="String">
update user set username = "王六" where username = #{name}
</update>
影响行数:
三.插入自动返回主键操作
这个部分我们重用上面的插入的代码;
清空Test里的代码添加下面代码:
User user = new User();
user.setId(19);
user.setBirthday(new Date());
user.setAddress("北京");
user.setUsername("李成");
user.setSex("男");
//insert的返回值影响的行数
int affectedRwows = sqlSession.insert("insertUser", user);
System.out.println(affectedRwows);
System.out.println(user.getId());
sqlSession.commit();//提交事务,否则会事务回滚
User.xml关键内容:
<insert id="insertUser" parameterType="domain.User">
<!--keyProperty为属性的名字,在User表中id为主键故填id-->
<!--order为After表示将语句插入后将得到的id值复制给你传入的User参数,这里不要人为的赋值id不然得到的便是0,同时也不建议使用before因为得到结果一般不对-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
</insert>