什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检 索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory 产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
1. 在Java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
mybatis实战教程(mybatis in action)之一:开发环境搭建
mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意
CREATE TABLE `user` ( `id` int(4) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `password` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf-8
下面开始1、设置mybatis 配置文件:Configuration.xml, 在src目录下建立此文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="User" type="com.handly.mybatis.model.User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mis4_produce" /> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/handly/mybatis/model/User.xml"/> </mappers> </configuration>
2、建立与数据库对应的 java class,以及映射文件. 在src下建立package:com.handly.mybatis.model ,并在这个 package 下建立 User 类:
package com.handly.mybatis.model; public class User { private Integer id; private String username; private String password; private String name; //省略get/set方法 }
同时建立这个User 的映射文件 User.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="com.handly.mybatis.models.UserMapper"> dao.UserDao--> <mapper namespace="com.handly.mybatis.dao.UserDao"> <select id="selectUserByID" parameterType="int" resultType="User"> select * from `user` where id = #{id} </select> </mapper>
下面对这几个配置文件解释下:
1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 这个别名非常重要,你在 具体的类的映射中,比如User.xml 中 resultType 就是对应这里的。要保持一致,当然这里的 resultType 还有另外单独的定义方式,后面再说。
2. Configuration.xml 里面 的是包含要映射的类的xml配置文件。
3. 在User.xml 文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等.
开始测试 在test 源码目录下建立test.user这个package,并建立测试类TestUser:
package test.user; import java.io.Reader; 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 org.junit.Test; import com.handly.mybatis.model.User; public class TestUser { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlSessionFactory; } @Test public void test() { SqlSession session = sqlSessionFactory.openSession(); try { User user = (User) session.selectOne("com.handly.mybatis.models.UserMapper.selectUserByID", 1); System.out.println(user.getUsername()); System.out.println(user.getDate()); } finally { session.close(); } } }
现在运行这个程序,是不是得到查询结果了。恭喜你,环境搭建配置成功,接下来第二章,将讲述基于接口的操作方式,增删改查。
mybatis实战教程(mybatis in action)之二:以接口的方式编程
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selectOne("com.handly.mybatis.models.UserMapper.selectUserByID", 1)
其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如UserDao.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:
package com.handly.mybatis.dao; import com.handly.mybatis.model.User; public interface UserDao { public User selectUserByID(int id); }
请注意:
1、这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应
2、User.xml中namespace,将com.handly.mybatis.models.UserMapper替换为:com.handly.mybatis.dao.UserDao
重写测试代码
/** * 根据ID获取用户 */ @Test public void testGetById(){ SqlSession session = sqlSessionFactory.openSession(); try { UserDao userDao = session.getMapper(UserDao.class); User user = userDao.selectUserByID(1); System.out.println(user.getUsername()); System.out.println(user.getDate()); } finally { session.close(); } }
运行这个测试程序,就可以看到结果了。
mybatis实战教程(mybatis in action)之三:实现数据的增删改查
前 面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:
1. 用 mybatis 查询数据,包括列表
2. 用 mybatis 增加数据
3. 用 mybatis 更新数据.
4. 用 mybatis 删除数据.
查询数据,前面已经讲过简单的,主要看查询出列表的 查询出列表,也就是返回list, 在我们这个例子中也就是 List , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的
查询列表的语句在 User.xml 中
<!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --> <select id="selectUsers" parameterType="string" resultMap="resultListUser"> select * from user where username like #{userName} </select>
在 UserDao接口中增加方法:public List selectUsers(String userName); 现在在 Test 类中做测试
/** * 根据用户登录名模糊搜索 */ @Test public void testGetByUserName(){ SqlSession session = sqlSessionFactory.openSession(); try { UserDao userDao = session.getMapper(UserDao.class); List list = userDao.selectUsers("admin"); if(null!=list && list.size()>0){ for(User user: list){ System.out.println(user.getUsername()); System.out.println(user.getDate()); } }else{ System.out.println("list is null;"); } } finally { session.close(); } }
用mybatis 增加数据 在 UserDao接口中增加方法:public void addUser(User user); 在 User.xml 中配置
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(username,password,name,date,guoji,quhao,sex,mail,shouji) values(#{username},#{password},#{name},#{date},#{guoji},#{quhao},#{sex},#{mail},#{shouji}) </insert>
然后在 Test 中写测试方法:
/** * 添加用户 */ @Test public void testAddUser(){ SqlSession session = sqlSessionFactory.openSession(); try { UserDao userDao = session.getMapper(UserDao.class); User user=new User(); user.setUsername("wwww"); user.setPassword("111222333"); user.setName("老汤"); userDao.addUser(user); session.commit(); System.out.println("当前增加的用户 id为:"+user.getId()); } finally { session.close(); } }
用mybatis 更新数据 方法类似,先在 UserDao中增加方法:public void addUser(User user); 然后配置 User.xml
<update id="updateUser" parameterType="User" > update user set password=#{password},name=#{name} where id=#{id} </update>
Test 类总的测试方法如下:
/** * 更新用户 */ @Test public void testUpdateUser(){ SqlSession session = sqlSessionFactory.openSession(); try { UserDao userDao = session.getMapper(UserDao.class); User user=new User(); user.setId(1); user.setUsername("ccccc"); user.setPassword("444555666"); user.setName("汤小米"); userDao.updateUser(user); session.commit(); System.out.println("当前增加的用户 id为:"+user.getId()); } finally { session.close(); } }
用mybatis 删除数据 同理,UserDao增加方法:public void deleteUser(int id); 配置User.xml
<delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete>
然后在Test类中写测试方法:
/** * 删除用户 */ @Test public void testDelUser(){ SqlSession session = sqlSessionFactory.openSession(); try { UserDao userDao = session.getMapper(UserDao.class); userDao.deleteUser(41); session.commit(); } finally { session.close(); } }
相关推荐
mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...
Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf ...
mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...
5. **集成到构建流程**:为了确保每次代码生成都能与项目的最新状态同步,你可以将MybatisGenerate集成到持续集成(CI)/持续部署(CD)流程中,这样每次代码提交后,都会自动更新生成的代码。 总结起来,Mybatis...
在实际项目中,通常会使用Spring来管理Struts2的Action和MyBatis的SqlSession,形成SSH(Struts2 + Spring + Hibernate)或SSM(Struts2 + Spring + MyBatis)架构。但在这个入门实例中,我们仅关注Struts2和MyBatis...
《深入浅出MyBatis技术原理与实战》是一本针对Java开发者深度解析MyBatis框架的专业书籍。MyBatis是一个优秀的持久层框架,...同时,mybatis-in-action-master.zip可能包含了书中示例项目的源代码,供读者实践和参考。
MyBatis起源于Apache的一个开源项目iBatis,在2010年由Apache Software Foundation迁移到Google Code并更名为MyBatis。之后在2013年11月,该项目迁移至GitHub进行维护。 MyBatis是一个优秀的持久层框架,支持普通的...
在实际开发中,通常还会涉及到Spring框架的整合,Spring可以管理Struts的Action和MyBatis的Mapper实例,提供依赖注入,进一步提升应用的可测试性和可维护性。通过Spring的事务管理,可以方便地控制数据库事务的边界...
2. **Interceptor**:拦截器允许开发者定义一系列预处理和后处理操作,如日志记录、权限验证等,可以灵活地插入到Action调用链中。 3. **Result**:Action执行后的结果,可以是跳转到另一个Action、渲染一个JSP页面...
- **集成步骤**:配置Struts2的Action类,注入MyBatis的DAO接口,然后在Action中调用DAO接口的方法来执行数据库操作。 - **结果拦截器**:Struts2的Result类型可以配置为MyBatis的结果类型,这样可以直接将查询...
MyBatis允许开发者编写SQL语句,将它们映射到Java方法上,提供了更加灵活和直接的数据访问方式,避免了传统的数据访问框架中的大量对象关系映射(ORM)工作。 【描述】"用在持久层,还可以再增加或者修改的时候,从...
在本整合实例中,我们将利用Spring的注解配置来管理Struts2的Action和Mybatis的Mapper。首先,我们需要在Spring配置文件中启用注解扫描,以便Spring能发现并管理我们的Action和Mapper。 1. **Struts2配置**:在...
《Spring 3.2.6、Struts 2.3.15与MyBatis 3整合实战详解》 在Java Web开发领域,Spring、Struts和MyBatis是三大主流框架,它们各自承担着不同的职责,共同构建了一个强大的企业级应用开发环境。本DEMO以Spring ...
5. **整合Spring和MyBatis**:通过Spring的SqlSessionFactoryBean,将MyBatis的SqlSessionTemplate或SqlSessionDaoSupport注入到Service层,实现对数据库的操作。 **数据库建表** 在项目中,通常会提供数据库脚本...
5. 数据操作完成后,Service将结果返回给Action,Action再将结果封装成Model对象,通过Struts的Result机制转发到相应的JSP页面显示结果。 6. JSP页面接收到Model对象,渲染成用户可以理解的HTML并返回给客户端。 在...
综合这些教程,开发者可以系统学习到Java企业级开发的关键技术,包括Spring的DI和AOP、MyBatis的SQL映射、Hibernate的ORM以及Struts2的MVC架构。通过深入理解和实践,开发者能够构建出高效、可扩展的Java应用程序。...
总之,"mybatis+struts2整合demo"提供了一个实战平台,让开发者能够了解如何将这两个流行的Java框架集成,从而实现高效的企业级Web应用开发。通过这个示例,你可以学习到MyBatis的动态SQL、Struts2的MVC模式以及两者...
**Struts2** 是一个强大的MVC框架,负责处理HTTP请求并将其映射到特定的Action,进而执行业务逻辑。在Struts2中,Action类是业务逻辑的载体,配置在struts.xml文件中,通过拦截器链来处理请求和响应。Struts2还提供...
Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...
通过以上步骤,Struts2和MyBatis的整合可以让我们在处理复杂的业务逻辑时,既能充分利用Struts2的控制能力,又能享受到MyBatis带来的数据库操作便利。这种整合方式降低了系统的耦合度,提高了代码的可维护性和可扩展...