maven中使用mybatis
1、Mybatis优缺点
优点: Mybatis实现了对Dao层的封装,隔离了SQL语句,便于管理,避免了像JDBC那样操作数据集,便于扩展等等。
缺点: Mybatis属于?半自动“ORM”,比Hibernate的工作做得要多很多,对象参数传递比较麻烦,没有Hibernate对象操作的概念。
2、Mybatis的实现方式
Mybatis提供两种应用实现:XML配置和注解。
2.1配置主要依赖实体对象的xml文件,将对象以<resultMap>形式注入,并提供给<insert > <delete > <select> <update> 语句引用。
2.2使用注解来的比配置XML文件要简单得多。只需要在接口上添加相应的注解并附上SQL语句就行了,如:
插入语句:@insert(" insert into table_user ..")
修改语句: @update(" update table_user set ....")
删除语句:@delete(" delete from table_user .....")
查询语句:@select(" select * from table_user .....")
3、下载mybatis的jar包:mybatis-3.1.1-bundle.zip?,网址:http://code.google.com/p/mybatis/
Maven的pom.xml依赖配置如下:
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.1.1</version>
- </dependency>
依赖仓库配置:
- <repository>
- <id>mybatis-snapshot</id>
- <name>MyBatis Snapshot Repository</name>
- <url>https://oss.sonatype.org/content/repositories/snapshots</url>
- </repository>
4、构建自己的mybatis项目,如图所示:

展开文件展示:
5、mybatis-config.xml:配置数据源和隐射文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
- <configuration>
- <environments default="environment">
- <environment id="environment">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver" />
- <property name="url"
- value="jdbc:mysql://localhost:3306/mybatis?characterEncoding =UTF-8" />
- <property name="username" value="root" />
- <property name="password" value="root" />
- </dataSource>
- </environment>
- </environments>
- <!-- <mappers> <mapper resource="mybatis/User.xml"/> </mappers> -->
- </configuration>
注:<!-- <mappers> <mapper resource="mybatis/User.xml"/> </mappers> -->是使用实体配置的实现,如果使用注解则不需要添加。
6、使用注解实现CRUD操作-此处以实现用户管理为例
6.1编写接口(interface):实际上就是官方文档所述的Mapper
- public interface UserService {
- @Insert(" insert into users (id,username,password) values (#{id},#{username},#{password})")
- void add(@Param("id")String id,@Param("username") String username,@Param("password")String password);
- @Delete(" delete from users where id=#{id}")
- void delete(String id);
- @Update(" update users set username=#{username},password=#{password} where id=#{id}")
- int update(@Param("username") String username,@Param("password")String password,@Param("id")String id);
- @Select(" select * from users where id=#{id}")
- User getUser(String id);
- @Select(" select * from users order by id asc ")
- List<User> getUsers();
- @Select(" select * from users order by id asc limit #{pageSize} offset #{offset} ")
- List<User> getUsersByPage(@Param("offset")int offset,@Param("pageSize") int pageSize);//offset=pageSize*(page-1)}?
- }
注:使用注解时接口的方法不能重载,否者会产生Mapped Statements collection does not contain value for 异常,另外还应尽量避免配置和注解混合使用的情况。
6.2获取数据源
- public class GetSqlSessionFactory
- {
- private static SqlSessionFactory sqlSessionFactory = null;
- private static GetSqlSessionFactory getSqlSessionFactory = null;
- private GetSqlSessionFactory()
- {
- String rs = "mybatis-config.xml";
- Reader reader = null;
- try
- {
- reader = Resources.getResourceAsReader(rs);
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
- // 注解方式查询时需要注册mapper
- sqlSessionFactory.getConfiguration().addMapper(UserService.class);
- }
- public static GetSqlSessionFactory getInstance()
- {
- if (getSqlSessionFactory == null)
- getSqlSessionFactory = new GetSqlSessionFactory();
- return getSqlSessionFactory;
- }
- public static SqlSessionFactory getSqlSessionFactory()
- {
- return sqlSessionFactory;
- }
- }
6.3DAO层:数据访问
- public class UserDao
- {
- @SuppressWarnings("static-access")
- public void add(String id, String username, String password)
- {
- SqlSession session = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
- try
- {
- session.getMapper(UserService.class).add(id, username, password);
- session.commit();// 提交事务
- } catch (Exception e)
- {
- e.printStackTrace();
- } finally
- {
- session.close();
- }
- }
- @SuppressWarnings("static-access")
- public void delete(String id)
- {
- SqlSession session = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
- try
- {
- session.getMapper(UserService.class).delete(id);
- session.commit();// 提交事务
- } catch (Exception e)
- {
- e.printStackTrace();
- } finally
- {
- session.close();
- }
- }
- @SuppressWarnings("static-access")
- public int update(String username, String password, String id)
- {
- int count = 0;
- SqlSession session = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
- try
- {
- // Map<String, Object> map=new HashMap<String, Object>();
- // map.put("username", user.getUsername());
- // map.put("password", user.getPassword());
- // session.update("updateUser", map);
- count = session.getMapper(UserService.class).update(username, password, id);
- session.commit();// 提交事务
- } catch (Exception e)
- {
- count = 0;
- e.printStackTrace();
- } finally
- {
- session.close();
- }
- return count;
- }
- @SuppressWarnings("static-access")
- public List<User> getUsers(int offset, int pageSize)
- {
- List<User> users = new ArrayList<User>();
- SqlSession session = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
- try
- {
- // users=session.selectList("user_list_page", new User(),new
- // RowBounds(offset,pageSize));//未测试过
- // 注解方式查询
- users = session.getMapper(UserService.class).getUsersByPage(offset, pageSize);
- } catch (Exception e)
- {
- e.printStackTrace();
- } finally
- {
- session.close();
- }
- return users;
- }
- }
6.4servlet实现数据跳转访问
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
- response.setContentType("text/html;charset=utf-8");
- UserService userService = new UserServiceImpl();
- PrintWriter out = response.getWriter();
- String method = request.getParameter("method");
- String returnString = "";
- // 方法入口
- if (method.equals("users"))
- {
- returnString = new JsonUtil<User>().getJsonByListObj(userService.getUsers());
- } else if (method.equals("user"))
- {
- String id = request.getParameter("id");
- returnString = new JsonUtil<User>().getJsonByEntity(userService.getUser(id));
- } else if (method.equals("delete"))
- {
- String id = request.getParameter("id");
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("event", method);
- map.put("param", id);
- returnString = new JsonUtil<User>().getJsonByObject(map);
- } else if (method.equals("update"))
- {
- String id = request.getParameter("id");
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- Map<String, Object> map = new HashMap<String, Object>();
- int count = userService.update(username, password, id);
- map.put("status", count == 0 ? false : true);
- map.put("event", method);
- map.put("param", id);
- returnString = new JsonUtil<User>().getJsonByObject(map);
- } else if (method.equals("paginate"))
- {
- int limit = Integer.valueOf(request.getParameter("pageSize"));
- int offset = Integer.valueOf(request.getParameter("offset"));
- returnString = new JsonUtil<User>().getJsonByListObj(userService.getUsersByPage(offset, limit));
- }
- // 输出JSON数据
- out.print(returnString);
- out.flush();
- out.close();
- }
至此,注解方式的实现就全部完成了。
7、User.xml实体对象配置
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
- <mapper namespace="com.boonya.mybatis.entity.User">
- <resultMap id="UserResultMap" type="com.boonya.mybatis.entity.User">
- <result property="id" column="id" jdbcType="VARCHAR" javaType="string" />
- <result property="name" column="name" javaType="string"
- jdbcType="VARCHAR" />
- <result property="createtime" column="createtime" javaType="string"
- jdbcType="VARCHAR" />
- <result property="tilepath" column="tilepath" javaType="string"
- jdbcType="VARCHAR" />
- <result property="lastlogintime" column="lastlogintime"
- javaType="string" jdbcType="VARCHAR" />
- <result property="nickname" column="nickname" javaType="string"
- jdbcType="VARCHAR" />
- <result property="password" column="password" javaType="string"
- jdbcType="VARCHAR" />
- <result property="picture" column="picture" javaType="string"
- jdbcType="VARCHAR" />
- <result property="sex" column="sex" javaType="string" jdbcType="VARCHAR" />
- <result property="username" column="username" javaType="string"
- jdbcType="VARCHAR" />
- </resultMap>
- <span style="color:#ff0000"><!-- 一般的SQL查询或操作语句配置 --></span>
- <select id="user" parameterType="int" resultType="com.boonya.mybatis.entity.User"
- resultMap="UserResultMap">select * from users where id=#{id} </select>
- <select id="users" resultMap="UserResultMap">select * from users order by id asc
- </select>
- <insert id="addUser" parameterType="com.boonya.mybatis.entity.User"
- parameterMap="UserResultMap">insert into users
- (id,name,createtime,email,tilepath,lastloginip,lastlogintime,nickname,password,picture,sessionid,sex,tel,username)
- values
- (#{id},#{name},#{createtime},#{email},#{tilepath},#{lastloginip},#{lastlogintime},#{nickname},#{password},#{picture},#{sessionid},#{sex},#{tel},#{username})
- </insert>
- <span style="color:#ff0000"><!-- Dynamic SQL 这里的方法未经测试 -->
- <!-- IF --></span>
- <select id="dynamic_user" resultMap="UserResultMap">
- select * from users where username=#{username}
- <if test="name!=null">and name=#{name}</if>
- </select>
- <span style="color:#ff0000"><!-- FOREACH --></span>
- <select id="dynamic_users" resultMap="UserResultMap">
- select * from users name=#{name} and createtime in
- <foreach collection="list" item="classTimeList" open="("
- separator="," close=")"> #{classTimeList} </foreach>
- </select>
- <span style="color:#ff0000"><!-- choose when otherwise --></span>
- <select id="dynamic_findNameLike" resultMap="UserResultMap">
- SELECT * FROM USERS WHERE NAME IS NOT NULL
- <choose>
- <when test="nickname!=null">AND nickname like #{nickname}</when>
- <when test="picture!=null ">AND picture like #{picture}</when>
- <otherwise>AND lastlogintime > #{lastlogintime}</otherwise>
- </choose>
- </select>
- <span style="color:#ff0000"><!-- WHERE --></span>
- <select id="dynamic_findUSERSLike" resultMap="UserResultMap">
- select * from users
- <where>
- <if test="name!=null">WHERE name LIKE #{name}</if>
- </where>
- </select>
- </mapper>
注:如果使用配置需将mybatis-config.xml文件的mapper去掉注释:
<!-- <mappers>
<mapper resource="mybatis/User.xml"/>
</mappers> -->
并且注释掉使用注解的mapper隐射:
//注解方式查询时需要注册mapper
sqlSessionFactory.getConfiguration().addMapper(UserService.class);
配置方式是根据SQL语句的隐射去访问的 如UserDao 中的getUsers方法:
//xml方式查询
//users=session.selectList("users");
8、测试数据是否能够正常访问
8-1、数据库mybatis创建users表并添加数据
- /*
- Navicat MySQL Data Transfer
- Source Server : localhost
- Source Server Version : 50513
- Source Host : localhost:3306
- Source Database : mybatis
- Target Server Type : MYSQL
- Target Server Version : 50513
- File Encoding : 65001
- Date: 2012-12-17 18:25:15
- */
- SET FOREIGN_KEY_CHECKS=0;
- -- ----------------------------
- -- Table structure for `users`
- -- ----------------------------
- DROP TABLE IF EXISTS `users`;
- CREATE TABLE `users` (
- `id` varchar(50) NOT NULL,
- `username` varchar(30) DEFAULT NULL,
- `password` varchar(20) DEFAULT NULL,
- `name` varchar(30) DEFAULT NULL,
- `nickname` varchar(30) DEFAULT NULL,
- `sex` varchar(10) DEFAULT NULL,
- `picture` varchar(255) DEFAULT NULL,
- `createtime` varchar(20) DEFAULT NULL,
- `lastlogintime` varchar(50) DEFAULT NULL,
- `tilepath` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of users
- -- ----------------------------
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00001', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_000010', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00002', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '女', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00003', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00004', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00005', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '女', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00006', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00007', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00008', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '男', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
- INSERT INTO `users` VALUES ('HUSDHSHFSD_00009', 'BOONYA', '123456', 'BOONYA_U', 'BOONYA_*', '女', 'images/inde.png', '2012-12-17 15:30:23', '1832928398932', 'this/home/index.tile');
8-2、修改web.xml的servlet的配置
- <!DOCTYPE web-app PUBLIC
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd" >
- <web-app>
- <display-name>Archetype Created Web Application</display-name>
- <servlet>
- <servlet-name>DefaultUserListHandler</servlet-name>
- <display-name>DefaultUserListHandler</display-name>
- <description></description>
- <servlet-class>com.boonya.mybatis.servlet.DefaultUserListHandler</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>DefaultUserListHandler</servlet-name>
- <url-pattern>/userservice</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- </web-app>
将mybatis项目部署到Tomcat服务器中,启动服务器,在浏览器输入:http://localhost:8080/mybatis/userservice?method=users会看到如下图所示的结果:
maven中使用mybatis的更多相关文章
- 使用IDEA在Maven中创建MyBatis逆向工程以及需要注意的问题(入门)
逆向工程简介: mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.xml.pojo…),可以让程序员将更多的精力放在繁杂的业务逻 ...
- 如何在Eclipse中搭建MyBatis基本开发环境?(使用Eclipse创建Maven项目)
实现要求: 在Eclipse中搭建MyBatis基本开发环境. 实现步骤: 1.使用Eclipse创建Maven项目.File >> New >> Maven Project ...
- 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建
基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...
- IDEA Maven项目的Mybatis逆向工程
IDEA Maven项目的Mybatis逆向工程 1.配置.pom 如果是在多模块开发下,该文件逆向工程要生成的那个模块下的pom文件. <build> <plugins> & ...
- 记录-项目java项目框架搭建的一些问题(maven+spring+springmvc+mybatis)
伴随着项目框架的落成后,本以为启动就能成功的,but.... 项目启动开始报错误1:java.lang.ClassNotFoundException: org.springframework.web. ...
- java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)
首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...
- Maven 项目使用mybatis的环境搭建-基于xml形式实现查询所有的功能
首先了解一下什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...
- Maven项目使用mybatis报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
maven项目使用mybatis时,找不到mapper文件(.xml) 错误信息提示: 项目可以正常运行,但是在有请求到达服务器时(有访问数据库的请求),会出现报错!! 错误原因: mybatis没有 ...
- 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解
http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...
随机推荐
- STM8S103-STVD建立汇编代码项目
转载:http://blog.csdn.net/u010093140/article/details/49983397 STVD本来就比较少人用,STVD汇编就更少人用了,不过STM8汇编我自己还是满 ...
- lsof 命令简介
losf 命令可以列出某个进程打开的所有文件信息.打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域So ...
- Site Isolation Design Document
This design document covers technical information about how Site Isolation is built. For a general ...
- shell学习日志
0.shell的变量同环境变量不同,存在用户环境区. 变量赋值的方式是: variable_name = variable_value a= "hello" $a对a进行取值 关于 ...
- jquery IE7 下报错:SCRIPT257: 由于出现错误 80020101 而导致此项操作无法完成
非IE(内核)浏览器运行正常,在IE中运行异常,一般考虑为js中多了符号. 常见的有: 1.上面的html注释"<!-- -->",这种 ...
- 转:移动建站工具(一):分秒钟将Web网站移动化
作者唐小引 移动建站工具Web移动化简易开发MobifyTOPMobile Joomla!MoFuseWordPress优化 摘要:时下移动端显然已是诸多企业都想要占领的重要阵地.但限于较小的屏幕 ...
- python之路-------字符串与正則表達式
1.1.#####去掉字符串中的转义符string.strip() print "hello\tworld\n" >>> word="\thello w ...
- Querying mergeinfo requires version 3 of the FSFS filesystem schema svn右键没菜单
svn 报错,Querying mergeinfo requires version 3 of the FSFS filesystem schema 经过查询,是svn客户端和服务端版本不一致造成的. ...
- Leetcode:Singel Number
问题描写叙述: Given an array of integers, every element appears twice except for one. Find that single one ...
- Web端本地存储
1.需求背景:当用户在页面上添加一行一行的数据时,突然发现网络断掉了,页面上编辑的数据没法保存进数据库,所以需要一个本地端的临时保存功能,以便在网络通畅后重新加载出来! 2.解决方案: 结合网上搜刮, ...