MyBatis实现CRUD(增加,删除,修改,查询,分页)
2016-10-28 22:29
597 查看
一、项目环境准备
开发环境:http://blog.csdn.net/u012737182/article/details/52960060
数据库脚本:(MySQL)
建立vo类
修改mybatis.cfg.xml 文件
二、实现数据增加:
1、定义News.xml 文件:
现在不需要处理nid 的列,此列的内容为自动增长。
2、实现数据的追加保存
输出:
3、 那么此时保存完成之后发现nid 的数据并没有设置上去。因为这个nid 的数据内容属于自动增长,所以如果要想进行自动增长
主键的ID 内容取得,就必须依靠配置完成:
输出:
三、实现数据修改
1、 首先在Member.xml 文件里面设置一个数据修改的SQL 语句:
2、 编写程序来实现程序调用;
三、数据的基本查询操作
1、在News.xml 文件里面配置查询操作的语句:
2、在测试类中编写查询处理:
在整个的处理过程之中,MyBatis 是利用反射实现的VO 转换,所以就必须保证属性名称要与类名称一致,那么如果不一致有
两种解决方案:
· 方案一:为查询列设置别名:
四、数据分页查询
1、修改News.xml 文件,定义分页查询的相关操作内容:
在配置文件中两种标记的区别:
· ${}:那么该值不会变为“?”解析,而会直接使用它的相关内容;
· #{}:那么该值在最终解析的时候会变为“?”解析。
2、在程序之中进行调用测试:
开发环境:http://blog.csdn.net/u012737182/article/details/52960060
数据库脚本:(MySQL)
DROP DATABASE IF EXISTS mybatisdb ; CREATE DATABASE mybatisdb CHARACTER SET UTF8 ; USE mybatisdb ; CREATE TABLE news( nid INT AUTO_INCREMENT , pub_date DATETIME , CONSTRAINT pk_nid PRIMARY KEY(nid) );
建立vo类
@SuppressWarnings("serial") public class News implements Serializable { private Integer nid ; private String title ; private Date pubdate ; //省略set、get方法 }
修改mybatis.cfg.xml 文件
<!-- 为所有的VO类定义别名, 这样就可以方便不同的配置文件中针对于VO的访问 --> <typeAliases> <!-- 以后使用别名“News”,代替了“cn.mldn.vo.News” --> <typeAlias type="xx.xxx.vo.News" alias="News"/> </typeAliases> <mappers> <!-- 映射文件信息 --> <mapper resource="cn/mldn/vo/mapping/News.xml" /> </mappers>
二、实现数据增加:
1、定义News.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"> <mapper namespace="cn.mldn.vo.mapping.NewsNS"> <!-- 定义要进行数据追加操作的SQL语句,每一个SQL都需要有一个自己独立的ID,这个ID为程序引用 --> <insert id="doCreate" parameterType="News"> INSERT INTO news(title,pub_date) VALUES (#{title},#{pubdate}) ; </insert> </mapper>
现在不需要处理nid 的列,此列的内容为自动增长。
2、实现数据的追加保存
public class NewsTest { private Logger log = Logger.getLogger(NewsTest.class); @Test public void testAdd() throws Exception { Random rand = new Random(); News vo = new News(); vo.setTitle("Hello - " + rand.nextInt(9129292)); vo.setPubdate(new Date()); int len = MyBatisSessionFactory.getSession().insert("vo.mapping.NewsNS.doCreate", vo); MyBatisSessionFactory.getSession().commit(); TestCase.assertEquals(len, 1); log.info(vo); // 直接输出VO对象 MyBatisSessionFactory.close(); } }
输出:
News [nid=null, title=Hello - 1545, pubdate=xxxxxx]
3、 那么此时保存完成之后发现nid 的数据并没有设置上去。因为这个nid 的数据内容属于自动增长,所以如果要想进行自动增长
主键的ID 内容取得,就必须依靠配置完成:
<insert id="doCreate" parameterType="News" keyProperty="nid" useGeneratedKeys="true"> INSERT INTO news(title,pub_date) VALUES (#{title},#{pubdate}) ; </insert>
输出:
News [nid=2, title=Hello - 6415, pubdate=xxxxxx]
三、实现数据修改
1、 首先在Member.xml 文件里面设置一个数据修改的SQL 语句:
<update id="doUpdate" parameterType="News"> UPDATE news SET title=#{title} WHERE nid=#{nid} </update>
2、 编写程序来实现程序调用;
@Test public void testEdit() throws Exception { Random rand = new Random(); News vo = new News(); vo.setNid(1); vo.setTitle("修改数据 - " + rand.nextInt(9129292)); int len = MyBatisSessionFactory.getSession().update("vo.mapping.NewsNS.doUpdate", vo); MyBatisSessionFactory.getSession().commit(); TestCase.assertEquals(len, 1); MyBatisSessionFactory.close(); }
三、数据的基本查询操作
1、在News.xml 文件里面配置查询操作的语句:
<!-- 定义数据的查询处理,查询之后所有的数据要求以resultType定义的类型返回 --> <select id="findById" parameterType="java.lang.Integer" resultType="News"> SELECT nid,title,pub_date FROM news WHERE nid=#{nid} </select>
2、在测试类中编写查询处理:
@Test public void testGet() throws Exception { News vo = MyBatisSessionFactory.getSession().selectOne("vo.mapping.NewsNS.findById", 3); sysout(vo); TestCase.assertNotNull(vo); MyBatisSessionFactory.close(); }
在整个的处理过程之中,MyBatis 是利用反射实现的VO 转换,所以就必须保证属性名称要与类名称一致,那么如果不一致有
两种解决方案:
· 方案一:为查询列设置别名:
<select id="findById2" parameterType="java.lang.Integer" resultType="News"> SELECT nid,title,pub_date AS pubdate FROM news WHERE nid=#{nid} </select>
方案二:做整体的类与字段的映射:
<resultMap type="News" id="NewsMap"> <id column="nid" property="nid"/> <!-- 定义类中的属性与表id的关系 --> <result column="title" property="title"/> <result column="pub_date" property="pubdate"/> </resultMap> <select id="findById3" parameterType="java.lang.Integer" resultMap="NewsMap"> SELECT nid,title,pub_date FROM news WHERE nid=#{nid} </select>
四、数据分页查询
1、修改News.xml 文件,定义分页查询的相关操作内容:
<select id="findAllSplit" parameterType="java.util.Map" resultMap="NewsMap"> SELECT nid,title,pub_date FROM news WHERE ${column} LIKE #{keyWord} LIMIT #{start},#{lineSize} </select> <select id="getAllCount" parameterType="java.util.Map" resultType="java.lang.Integer"> SELECT COUNT(*) FROM news WHERE ${column} LIKE #{keyWord} </select>
在配置文件中两种标记的区别:
· ${}:那么该值不会变为“?”解析,而会直接使用它的相关内容;
· #{}:那么该值在最终解析的时候会变为“?”解析。
2、在程序之中进行调用测试:
@Test public void testSplit() throws Exception { int currentPage = 2; int lineSize = 5; String column = "title"; String keyWord = "Hello"; // 在整个映射文件里面接收的数据类型为Map集合 Map<String, Object> map = new HashMap<String, Object>(); map.put("column", column); map.put("keyWord", "%"+keyWord+"%"); map.put("lineSize", lineSize); map.put("start", (currentPage - 1) * lineSize); List<News> allNews = MyBatisSessionFactory.getSession().selectList("vo.mapping.NewsNS.findAllSplit", map); Integer newsCount = MyBatisSessionFactory.getSession().selectOne("vo.mapping.NewsNS.getAllCount", map); System.out.println(allNews); System.out.println(newsCount); MyBatisSessionFactory.close(); }
相关文章推荐
- 项目经验之:利用Jquery+HTML静态模版实现数据的展示及无刷新增加,修改,删除,分页操作!!!
- MyBatis3入门二(增加、删除、修改、查询,自增长字段)
- csdn 在c++ builder中,使用treeview实现对xml文档增加删除修改和查询等基本操作
- 连接数据库实现添加,删除,修改,AJAX异步,分页,查询等操作,
- mybatis 操作(批量插入,批量修改,批量删除, 分页查询)
- Mybatis操作(批量插入,批量修改,批量删除, 分页查询)
- 利用Jquery+HTML静态模版实现数据的展示及无刷新增加,修改,删除,分页操作!
- 用户DataGrid实现增加,删除,修改及分页
- MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))
- mybatis 批量增加、删除、修改、查询
- ssm实现crud_mybatis分页查询(2)
- 封装链表库实现单链表:增加,删除,查询,修改,排序,逆转
- Mybatis实现简单的分页,以及基本的查询修改功能
- DOM 实现Xml文档的增加,删除,修改,查询
- DOM4J实现XMl的增加,删除,修改,查询
- javascript实现分页及页面的增加删除修改操作
- MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))
- 使用angularjs实现查询、增加验证、修改、删除、以及批量删除等
- .net连接数据库,实现增加,修改,删除,查询的四大功能完整代码。
- MyBatis3入门三(增加、删除、修改、查询,自增长,允许空值,封装Mapper)