当前位置:文档之家› Mybatis3.1实战

Mybatis3.1实战

Mybatis3.1实战1、前言 (2)2、什么是mybatis (2)3、Mybatis入门实例 (2)4、Mybatis中的增、删、改、查 (8)5、Mybatis新特性介绍 (10)6、mybatis-config.xml中的元素介绍 (11)7、Mapper配置文件中的用法 (18)8、Mybatis参数传递 (20)9、基于注解的sql语句 (21)10、动态sql语句 (22)11、mybatis中的一对多、一对一、多对多 (24)12、自定义类型处理器 (28)13、Mybatis缓存的一点说明 (31)14、Spring3.1+springmvc+mybatis3.1集成 (31)备注 (40)Like模糊查询 (40)排序 (40)if元素中的条件语句 (41)1、前言随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis。

相信很多朋友以前看过ibatis2.x,对ibatis2.x也比较熟悉,随着技术的发展,我们必须跟得上技术发展的步伐,不能永远停留在原来的技术上而不做进一步学习。

由于在我的一个新项目中采用了mybatis,为此我发了几天来学习了mybatis,相对hibernate来说,本人感觉mybatis相对来说更加简单,特别是熟悉sql 语句的朋友们,你在采用mybatis时,你会觉得跟传统的jdbc方式来操作数据库没什么差别,只是mybatis帮你做了很多原来你在用jdbc来实现时的很多工作。

我们来看看mybatis包含了哪些新特性。

Mybatis实现了接口绑定,使用更加方便对象关系映射的改进,效率更高MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

在本学习教程中,全方位介绍了mybatis中的各种特性,里面的实例都是采用比较简单的实例来实现,对于有些没有介绍到的特性,大家可以参考官方文档。

本教程采用的是mybatis最新的版本mybatis3.1,并结合了maven来写这个教程,所以大家需要对maven有所了解。

2、什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs (Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

3、Mybatis入门实例在maven中加入mybatis、mysql、junit的依赖包:<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.1.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.21</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>创建数据库Create table student(id int primary key autoincrement,age int,name varchar(23));在mysql数据中创建student表。

配置SqlmapConfiguration.xml,在src目录下面的resources目录下面创建此文件,内容如下:<configuration><!-- 引入外部数据库配置文件 --><properties resource="database.properties"/><!--类型别名是为Java类型命名一个短的名字。

它只和XML配置有关,只用来减少类完全限定名的多余部分。

例如:使用这个配置,“Student”可以任意用来替代“com.marcle.domain.Student”所使用的地方。

对于普通的Java类型,有许多内建的类型别名。

它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。

--><typeAliases><typeAlias type="com.pango.mybatis.entity.Student"alias="Student"/><typeAlias type="com.pango.mybatis.entity.Status"alias="Status"/></typeAliases><!--environments 下用于配置不同数据库环境--><environments default="development"><environment id="development"><!--在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”): JDBC –这个配置直接简单使用了JDBC的提交和回滚设置。

它依赖于从数据源得到的连接来管理事务范围。

MANAGED –这个配置几乎没做什么。

它从来不提交或回滚一个连接。

而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。

默认情况下它会关闭连接。

然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false--><transactionManager type="JDBC"/><!-- 数据源的配置dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。

许多MyBatis的应用程序将会按示例中的例子来配置数据源。

然而它并不是必须的。

要知道为了方便使用延迟加载,数据源才是必须的有三种内建的数据源类型UNPOOLED –这个数据源的实现是每次被请求时简单打开和关闭连接。

它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。

不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的POOLED –这是JDB法C连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。

这是一种当前Web应用程序用来快速响应请求很流行的方JNDI –这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用--><dataSource type="POOLED"><property name="driver"value="${database.driver}"/><property name="url"value="${database.url}"/><property name="username"value="${er}"/><property name="password"value="${database.password}"/> </dataSource></environment></environments><mappers><!--指定要用到的mapper文件。

以下的resource属性告诉MyBatis要在类路径下的resources目录下找student.xml文件。

我们将把mapper文件存放在src目录下的resources目录中。

--><mapper resource="case/student.xml"/></mappers></configuration>其中外部引入的jdbc.properties内容如下:database.driver = com.mysql.jdbc.Driverdatabase.url = jdbc:mysql://localhost:3306/mybatis_01er = rootdatabase.password = marcle创建mapper文件,在resources目录下面的case文件夹下面创建student.xml文件<mapper namespace="com.pango.mybatis.dao.StudentDao"><resultMap type="Student"id="Student_Map"><id property="id"column="id"/><result property="age"column="age"/><result property="name"column="name"/></resultMap><insert id="insert"parameterType="Student">insert into student (age,name) values (#{age},#{name}) </insert><select id="select"resultType="Student"parameterType="int"> select * from student where id=#{id}</select></mapper>创建实体类及接口Student类public class Student implements Serializable {private Long id;private int age;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}}StudentDao接口public interface StudentDao {public Student select(int id);public void insert(Student student);}SqlMapUtil 工具类及数据调用public class SqlMapUtils {private static final Logger logger =LogManager.getLogger(SqlMapUtils.class);private static final String CONFIG_FILE_PATH= "mybatis-config.xml";private SqlSessionFactory sessionFactory=null;private SqlSession session=null;private static SqlMapUtils instance=null;public SqlMapUtils(){Reader reader=null;try {reader = Resources.getResourceAsReader(CONFIG_FILE_PATH);sessionFactory = newSqlSessionFactoryBuilder().build(reader);session = sessionFactory.openSession();} catch (IOException e) {// TODO Auto-generated catch blocklogger.fatal("IO Exception occured while reading the Configuration File \n" + e);e.printStackTrace();}finally{if(reader!=null){try {reader.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public static synchronized SqlMapUtils getInstance(){if (instance == null ){synchronized(SqlMapUtils.class){instance = new SqlMapUtils();}}return instance;}public SqlSession getSession(){if (session == null){throw new RuntimeException("Create SqlSession failed.");}return session;}}完成上面的步骤后,我们写一个测试类,测试上面所写的内容:public class StudentDaoTest {private StudentDao studentMapper;private SqlSession session;@Beforepublic void init(){session = SqlMapUtils.getInstance().getSession();studentMapper = session.getMapper(StudentDao.class);}@Testpublic void testInsert(){Student student = new Student();student.setAge(34);student.setName("luce");studentMapper.insert(student);mit();}@Testpublic void testFind(){Student student = studentMapper.select(3);System.out.println(student.getName());}@Afterpublic void end(){session.close();}}通过上面的几个步骤,我们就创建了一个完整的mybatis实例,通过这个实例,想必大家对mybatis有个初步的了解了。

相关主题