当实体类中的属性和数据库中的字段对应是,我们使用resultType和parameterType就可以完成CRUD;
当实体类中的属性和数据库中的字段不对应时,就要用resultMap和parameterMap了。
下面的代码是一个Book实体类 和 BOOK_MANAGE数据库,他们的字段是不对应的,以下是用resultMap和parameterMap进行的CRUD操作。
查询时,我们需要返回类型,即用resultMap;
增改删时,我们需要参数类型,即用parameterMap;(这里的删除是根据id删除,实体类和数据库对应的,所以用parameterType效果也一样。)
实体类:
public class Book {
private int id;
private String bookName;
private double bookPrice;
(.....省略get set 方法)
}
BookSql.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- Sql映射 | namespce:唯一标识当前此映射文件 -->
<mapper namespace="my.BookManage">
<!-- 将JAVA实体类中的属性和表中的字段进行对应
column:数据库中的列
property:对应的实体类中的属性
-->
<resultMap type="Book.dao.Book" id="BookResultMap">
<id column="id" property="id"/>
<result column="name" property="bookName"/>
<result column="price" property="bookPrice"/>
</resultMap>
<!-- resultMap:resultMap的id ,bookName:resultMap的property,即实体类中的属性 -->
<parameterMap type="Book.dao.Book" id="BookParameterMap">
<parameter property="bookName" resultMap="BookResultMap" />
<parameter property="bookPrice" resultMap="BookResultMap" />
</parameterMap>
<select id="selectAll" resultMap="BookResultMap">
select * from BOOK_MANAGE
</select>
<!-- 根据ID查询Book -->
<select id="selectBookById" parameterType="int" resultMap="BookResultMap">
select * from BOOK_MANAGE
where
id=#{id}
</select>
<!-- 根据ID删除Book -->
<delete id="deleteBookById" parameterType="Book.dao.Book">
delete from BOOK_MANAGE
where
id=#{id}
</delete>
<!-- 保存一个Book -->
<insert id="saveBook" parameterMap="BookParameterMap">
insert into BOOK_MANAGE
(ID,NAME,PRICE)
values
(Bookmanage_Seq.Nextval,#{bookName},#{bookPrice})
</insert>
<!-- 根据ID修改Book -->
<update id="updatePersnById" parameterMap="BookParameterMap">
update BOOK_MANAGE
set
NAME=#{bookName},
PRICE=#{bookPrice}
WHERE id=#{id}
</update>
</mapper>
接下来就是servive调用了:
public class BookService {
/**
* 准备工作,获得SqlSessionFactoryBean对象
* @return
* @throws Exception
* @throws Exception
*/
SqlSessionFactory sqlSessionFactory;
public void init() throws Exception{
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
}
/**
* 查询所有Book
* @throws Exception
*/
@Test
public void selectAll() throws Exception{
init();
SqlSession session = sqlSessionFactory.openSession();
List<Book> list = session.selectList("my.BookManage.selectAll");
session.close();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Book p = (Book) iterator.next();
System.out.println(p);
}
}
/**
* 根据ID查询Book
* @throws Exception
*/
@Test
public void selectBookByID() throws Exception{
init();
SqlSession session = sqlSessionFactory.openSession();
Book book = session.selectOne("my.BookManage.selectBookById",3);
session.close();
System.out.println(book);
}
/**
* 根据ID删除Book
* @throws Exception
*/
@Test
public void deleteBookByID() throws Exception{
init();
SqlSession session = sqlSessionFactory.openSession();
int i = session.delete("my.BookManage.deleteBookById",3);
System.out.println(i);
//对数据库数据会造成影响的,需要commit
session.commit();
session.close();
}
/**
* 保存一个Book
* @throws Exception
*/
@Test
public void saveBook() throws Exception{
init();
SqlSession session = sqlSessionFactory.openSession();
Book b =new Book();
b.setBookName("BookC");
b.setBookPrice(15.0);
int i = session.insert("my.BookManage.saveBook", b);
System.out.println("插入了"+i+"条数据");
session.commit();
session.close();
}
/**
* 根据Id修改一个Book
* @throws Exception
*/
@Test
public void updateBookById() throws Exception{
init();
SqlSession session = sqlSessionFactory.openSession();
Book b =new Book();
b.setBookName("BookB");
b.setBookPrice(20.0);
b.setId(3);
int i = session.update("my.BookManage.updatePersnById",b);
System.out.println("修改了"+i+"条数据");
session.commit();
session.close();
}
}