mybatis ---- 实现数据的增删改查
来源:互联网 发布:java 判断奇偶 编辑:程序博客网 时间:2024/06/12 01:04
前面介绍了接口方式的编程,需要注意的是:在book.xml文件中,<mapper namespace="com.mybatis.dao.IBookDao"> ,命名空间namespace,必须要与我们定义的package和接口一致,否则就会出错。这一章主要基于接口的编程完成如下事情.
用mybatis查询数据
上一章,已经介绍了查询数据(一行数据),这里我们主要看查询出列表的. 查询出列表,也就是返回List,在我们这个例子中也就是List<Book>, 这种方式返回数据,需要在book.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的. 注意:resultMap 不仅仅可以查询列表,也可以查询单个数据对象. 它也是解决列名不匹配的一种方式.
废话不多少,我直接把改动的代码文件贴出来:
IBookDao.java
package com.mybatis.dao;import java.util.List;import com.mybatis.model.Book;public interface IBookDao {//这里的selectBookById必须和book.xml 配置的select id 对应 public Book selectBookById(int id); //查询列表 public List<Book>selectAll(); }
book.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"> <!--这块等于Dao接口的实现 namespace必须和接口的类路径一样--><mapper namespace="com.mybatis.dao.IBookDao"> <resultMap type="Book" id="resultListBook"> <id property="id" column="id"/> <result property="imageUrl" column="image_url"/> <result property="name" column="book_name"/> <result property="author" column="author"/> <result property="description" column="description"/> </resultMap> <!-- queryEmpById必须和接口中的方法名一样, 返回一个Emp 就是刚才的别名 ,如果不用别名要连路径一起写,麻烦--> <!-- 这里我省略了参数类型,parameterType,主要是为了配合我数据库里的数据(只有两条嘛) --> <select id="selectAll" resultMap="resultListBook"> select id, image_url,book_name, author,description from books </select></mapper>
Test.java
package com.mybatis.test;import java.io.IOException;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.mybatis.dao.IBookDao;import com.mybatis.model.Book;public class Test {/*** * 获得MyBatis SqlSessionFactory * SqlSessionFactory 负责创建SqlSession ,一旦创建成功,就可以用SqlSession实例来执行映射语句 * ,commit,rollback,close等方法 * @return */private static SqlSessionFactory getSessionFactory(){SqlSessionFactory sessionFactory=null;String resource="configuration.xml"; try {sessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));} catch (IOException e) {e.printStackTrace();}return sessionFactory;}/** * main 方法 * @param args */public static void main(String[] args) { SqlSession session=getSessionFactory().openSession(); //获得IBookDao 接口实例 IBookDao bookDao=(IBookDao) session.getMapper(IBookDao.class); List<Book> listBook=bookDao.selectAll(); for(Book book :listBook){ System.out.println("id="+book.getId()+"\tiamge_url="+book.getImageUrl()+"\tauthor="+book.getAuthor()); }}}运行Test.java如下:
id=1iamge_url=resources/images/english.jpgauthor=孙悟空id=2iamge_url=resources/images/english.jpgauthor=刘诗诗
mybatis实现数据的增加
insert 语句会涉及到主键的问题。首先,如果你的数据库支持自动生成主键的字段(比如MySQL和SQL Server),那么你可以设置useGeneratedKeys="true",而且设置keyProperty到你已经做好的目标属性上。例如,我们的表books已经对id使用了自动生成的列类型,那么语句就可以变为:
<insert id="insertBook" parameterType="Book" useGeneratedKeys="true" keyProperty="id"> insert into books(image_url,book_name,author,description) values(#{imageUrl},#{name},#{author},#{description}) </insert>
MyBatis有另外一种方法来处理数据库不支持自动生成类型,或者JDBC驱动不支持自动生成主键时的主键生成问题。这里有一个简单的示例,使用Oralce的一个序列。
<insert id="insertBook2" parameterType="Book"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> <!--emppkempno是一个 oracle的序列--> select emppkempno.nextval from dual; </selectKey> <insert id="insertBook" parameterType="Book" useGeneratedKeys="true" keyProperty="id"> insert into books(id,image_url,book_name,author,description) values(#{id},#{imageUrl},#{name},#{author},#{description}) </insert>在上面的示例中,selectKey元素将会首先运行,Book的id会被设置,然后插入语句会被调用。
废话不多少,来看下MySQL的insert 用法:
book.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"> <!--这块等于Dao接口的实现 namespace必须和接口的类路径一样--><mapper namespace="com.mybatis.dao.IBookDao"> <resultMap type="Book" id="resultListBook"> <id property="id" column="id"/> <result property="imageUrl" column="image_url"/> <result property="name" column="book_name"/> <result property="author" column="author"/> <result property="description" column="description"/> </resultMap> <!-- queryEmpById必须和接口中的方法名一样, 返回一个Emp 就是刚才的别名 ,如果不用别名要连路径一起写,麻烦--> <!-- 这里我省略了参数类型,parameterType,主要是为了配合我数据库里的数据(只有两条嘛) --> <select id="selectAll" resultMap="resultListBook"> select id, image_url,book_name, author,description from books </select> <insert id="insertBook" parameterType="Book" useGeneratedKeys="true" keyProperty="id" > insert into books(image_url,book_name,author,description) values(#{imageUrl},#{name},#{author},#{description}) </insert></mapper>
IBookDao.java
package com.mybatis.dao;import java.util.List;import com.mybatis.model.Book;public interface IBookDao {//这里的selectBookById必须和book.xml 配置的select id 对应 public Book selectBookById(int id); //查询列表 public List<Book>selectAll(); //插入数据对象Book public void insertBook(Book book);}
Test.java ,如果不session.commit().,数据不会进入到数据库中.
package com.mybatis.test;import java.io.IOException;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.mybatis.dao.IBookDao;import com.mybatis.model.Book;public class Test {/*** * 获得MyBatis SqlSessionFactory * SqlSessionFactory 负责创建SqlSession ,一旦创建成功,就可以用SqlSession实例来执行映射语句 * ,commit,rollback,close等方法 * @return */private static SqlSessionFactory getSessionFactory(){SqlSessionFactory sessionFactory=null;String resource="configuration.xml"; try {sessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));} catch (IOException e) {e.printStackTrace();}return sessionFactory;}/** * main 方法 * @param args */public static void main(String[] args) { Book book=new Book(); book.setAuthor("安徒生"); book.setName("卖火柴的小女孩"); book.setDescription("好好学习,天天向上吧"); book.setImageUrl("resources/images/gg.jpg"); SqlSession session=getSessionFactory().openSession(); //获得IBookDao 接口实例 try { IBookDao bookDao=(IBookDao) session.getMapper(IBookDao.class); //测试增加 bookDao.insertBook(book); session.commit(); System.out.println(book.getId());} catch (Exception e) {e.printStackTrace();}finally{session.close();}}}
至于Update 和Delete ,与Insert 、update基本相同.,这里就不啰嗦了.
0 0
- mybatis ---- 实现数据的增删改查
- MyBatis实现数据的增删查改
- Mybatis实现数据的增删改查
- mybatis实现的对数据的增删查改
- mybatis实现的对数据的增删查改
- Mybatis实现的对数据的增删查改
- Mybatis学习(3)实现数据的增删改查
- Mybatis实现数据的增删改查(CRUD)
- Mybatis实现数据的增删改查(CRUD)
- MyBatis 通配,实现数据的增删改查
- Mybatis实现数据的增删改查(CRUD)
- MyBatis第三步、实现数据的增删改查
- Mybatis实现数据的增删改查(CRUD)
- Mybatis入门学习三:实现数据的增删改查
- 用MyBatis实现数据的增删改查
- Mybatis实现数据的增删改查(CRUD)
- Mybatis实现数据的增删改查(CRUD)
- mybatis实现的增删改查例子
- 用apache2 实现反向代理功能
- ios开发时,在Xcode中添加多个targets进行版本控制
- c++ 基本操作 考点总结(四)
- nginx学习
- 向上/向下取整及四舍五入(PHP和javascript)
- mybatis ---- 实现数据的增删改查
- Ubuntu Apache2重启提示could not reliably determine the server’e fully…问题解决
- ibatis 增加时返回自增主键
- oracle 设置主键自动增长
- 有用的站点和工具
- oracle数据泵的使用
- iOS获取本地ip
- VC++调用libcurl的VC库使用详解
- 排序