接着上一篇做笔记:
1。#{}表示占位符,{}中的参数名可以任意
$ {}值表示拼接符,传入简单类型,{}里只能使用值,使用$ {}拼接SQL,可能会引起SQL语句注入。
2. 处理单条记录,用簿对象,处理一张表中的多条记录,也可用预定对象(对象的注入属性要与映射到数据表中字段的属性一一对应,操作才会成功)
根据ID查(单条记录):
mapper中代码:
<select id="findUserById" parameterType="int" resultType="com.lmj.ssm.Book">
select * from book where book_id=#{id}
</select>
servlet中代码:
Book book=sqlSession.selectOne("test.findUserByName",1004);
System.out.println(book);
根据名字查(多条记录):
mapper中代码:
<select id="findUserByName" parameterType="java.lang.String" resultType="com.lmj.ssm.Book">
select * from book where name like '%${value}%'
</select>
servlet中代码:
List<Book> booklist=sqlSession.selectList("test.findUserByName","java");
System.out.println(booklist);
2.插入操作
映射文件:
<insert id="insertBook" parameterType="com.lmj.ssm.Book">
insert into book(name,number) value(#{name},#{number})
</insert>
JUnit的中的测试代码:
public class Test {
@org.junit.Test
public void findUaerByIdTest() throws Exception{
String resource="mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
Book book=new Book();
book.setName("java入门");
book.setNumber(123);
sqlSession.insert("test.insertBook",book);
sqlSession.commit();
System.out.println("ok");
sqlSession.close();
}
}
获取插入的自增主键,返回到本书中(即将查到的ID值赋给图书实体类中的与数据库ID映射的属性,BOOKID,所以keypropety也要设置成BOOKID,才能成功赋值),通过MySQL的自带的select last_insert_id()语句获取自增的主键
keyproperty:将查到的主键设置到parameterType(输入参数类型)的属性中,顺序:表示select last_insert_id()的执行顺序,在执行插入后执行select last_insert_id()语句
代码如下:
映射器中:
<insert id="insertBook" parameterType="com.lmj.ssm.Book">
<selectKey keyProperty="bookId" order="AFTER" resultType="java.lang.Integer">
select last_insert_id()
</selectKey>
insert into book(name,number) value(#{name},#{number})
</insert>
测试代码中:
public class Test {
@org.junit.Test
public void findUaerByIdTest() throws Exception{
String resource="mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
Book book=new Book();
book.setName("java入门");
book.setNumber(123);
sqlSession.insert("test.insertBook",book);
sqlSession.commit();
System.out.println(book.getBookId());
System.out.println("ok");
sqlSession.close();
}
后续删除更新代码类似,注意的是,写了sqlSession.insert(XXX),更新(),删除(),不要忘了加上sqlSession.commit()语句;
后续可通过SqlSessionFactoryBuilder对象创建会话工厂的SqlSessionFactory,把SqlSessionFactoryBuilder对象当成工具类即可,当需要创建SqlSessionFactory的时候,只需要新的一次SqlSessionFactoryBuilder对象即可