mybatis简单应用

来源:互联网 发布:双色球大数据分析 编辑:程序博客网 时间:2024/06/03 15:03

转载地址http://blog.sina.com.cn/s/blog_539d361e0100ncf0.html


  
本文主要介绍了如何使用mybatis进行简单的数据库操作。本人使用的是mybatis3.05。
1.创建数据库表(User表)
CREATE TABLE `NewTable` (`userId`  bigint(20) NOT NULL AUTO_INCREMENT ,`userName`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,`password`  varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,`comment`  varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,PRIMARY KEY (`userId`),UNIQUE INDEX `UQ_User_userName` (`userName`) USING BTREE)

2.2. 创建实体类

package com.mybatis.config;public class User {    private int userId;    private String userName;    private String password;    private String comment;    public int getUserId() {        return userId;    }    public void setUserId(int userId) {        this.userId = userId;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getComment() {        return comment;    }    public void setComment(String comment) {        this.comment = comment;    }}

3. 定义数据访问接口

package com.mybatis.config;import java.util.List;public interface UserDao {        public int insert(User user);        public int update(User user);        public int delete(String userName);        public List<User> selectAll();        public int countAll();        public User findByUserName(String userName);}

4.创建MyBatis映射文件(UserDaoMapper.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.mybatis.config.UserDao">    <select id="countAll" resultType="int">        select count(*) c from user;    </select>        <select id="selectAll" resultType="com.mybatis.config.User">        select * from user order by userName asc    </select>        <insert id="insert" parameterType="com.mybatis.config.User">        insert into user(userName,password,comment) values(#{userName},#{password},#{comment})    </insert>        <update id="update" parameterType="com.mybatis.config.User">        update user set userName=#{userName},password=#{password},comment=#{comment} where userName=#{userName}    </update>        <delete id="delete" parameterType="int">        delete from user where userName=#{userName}    </delete>        <select id="findByUserName" parameterType="String" resultType="com.mybatis.config.User">        select * from user where userName=#{userName}    </select></mapper>

5. 创建mybatis配置文件

<?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>    <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://localhost:3306/hlp?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />                <property name="username" value="root" />                <property name="password" value="1234" />            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="com/mybatis/config/UserDaoMapper.xml"/>    </mappers></configuration>

6. 编写测试代码

package com.mybatis.config;import java.io.Reader;import java.util.Iterator;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;public class UserDaoTest {    @Test    public void userDaoTest() throws Exception    {        String resource = "MyBatis-Configuration.xml";        Reader reader = Resources.getResourceAsReader(resource);        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();        SqlSessionFactory factory = builder.build(reader);                SqlSession session = factory.openSession();        UserDao userDao = session.getMapper(UserDao.class);                User user = new User();        user.setUserName("hongye");        user.setPassword("123456");        user.setComment("备注");                userDao.insert(user);        System.out.println("记录条数:"+userDao.countAll());                List<User> users = userDao.selectAll();        Iterator<User> iter = users.iterator();        while(iter.hasNext()){            User u = iter.next();            System.out.println("用户名:"+u.getUserName()+"密码:"+u.getPassword());        }                user.setComment("comment");        userDao.update(user);        User u = userDao.findByUserName("hongye");        System.out.println(u.getComment());                userDao.delete("hongye");        System.out.println("记录条数:"+userDao.countAll());                session.commit();        session.close();    }}


转载地址:http://www.blogjava.net/landon/articles/367285.html

 可参考ibatis\doc\MyBatis-3-User-Guide-zh_CN.pdf
1.ibatis->mybatis介绍
     MyBatis 是支持普通 SQL查询,存储过程等一个轻量级的ORM中间件。与传统的 JDBC 开发相比, MyBatis 消除了几乎所有的代码和参数的手工设置;MyBatis 使用简单的 XML 或注解方式,用于配置和原始映射,将接口和 Java 的POJOs(Plan Old Java Objects,普通的 Java对象)映射成数据库中的记录;
     mybatis 与 hibernate 比较:
     Hibernate基本上可以自动生成,其对数据库结构提供了较为完整的封装 ;开发效率上, 如果使用纯面向对象方式Hibernate 比较快,但如果以HQL其他方式相差不多;可维护性方面, mybatis框架是以sql的开发方式,可以进行细粒度的优化 ;Hibernate自动生成的sql效果不理想;MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
     MyBatis的前身就是iBatis,iBatis本是apache的一个开源项目,2010年这个项目由apahce sofeware foundation 迁移到了google code,并且改名为MyBatis;
     MyBatis是把实体类和sql语句之间建立了映射关系,而Hibernate在实体类和数据库之间建立了映射关系。
2.几个基本概念-
 Model:java中一般叫entity    POJO 里边主要是实体类  也就是对应数据库表中的类 每个表对应一个实体类 每个字段对应实体类中的一个属性
 DAO:数据访问层  Mvc 结构编程中访问数据库的dao层提供数据持久化接口
3.mybatis-3.xjar(mybatis核心包)
  mybatis-spring-1.x.jar(与Spring结合包)
 总体来说 MyBatis 主要完成两件事情:
     根据 JDBC 规范建立与数据库的连接;
     通过Annotaion/XML+JAVA反射技术,实现 Java 对象与关系数据库之间相互转化
5.所有的MyBatis 应用都以SqlSessionFactory 实例为中心。SqlSessionFactory 实例通过SqlSessionFactoryBuilder 来获得,SqlSessionFactoryBuilder 能够从XML 配置文件或者通过自定义编写的配置类(Configuration class),来创建一个SqlSessionFactory 实例。
     1.从XML 中创建SqlSessionFactory 实例
 建议您使用类资源路径(classpathresource)来加载配置文件,但是您也能够使用任何方式,包括文本文件路径或者以file:// 开头URL 的方式。MyBatis 包括一个叫做Resources 的工具类(utility class),其中包含了一系列方法,使之能简单地从classpath 或其它地方加载配置文件。
 String resource = "org/mybatis/example/Configuration.xml";
 Reader reader = Resources.getResourceAsReader(resource);
 sqlMapper = new SqlSessionFactoryBuilder().build(reader);
 XML 配置文件包含MyBatis 框架的核心设置,包括获取数据库连接的DataSource 实例,和包括决定事务作用域范围和控制的事务管理等。

 1<?xml version="1.0" encoding="UTF-8" ?>
 2   <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5  <configuration>
 6   <environments default="development">
 7    <environment id="development">
 8    <transactionManager type="JDBC"/>
 9    <dataSource type="POOLED">
10     <property name="driver" value="${driver}"/>
11     <property name="url" value="${url}"/>
12     <property name="username" value="${username}"/>
13     <property name="password" value="${password}"/>
14    </dataSource>
15    </environment>
16   </environments>
17  <mappers>
18   <mapper resource="org/mybatis/example/BlogMapper.xml"/>
19  </mappers>
20 </configuration>
21


   2.
 MyBatis 提供了一个完整的配置类(Configuration class),它提供了与XML 文件相同的配置选项。

1TransactionFactory transactionFactory = new JdbcTransactionFactory();
2  Environment environment = new Environment("development", transactionFactory, dataSource);
3  Configuration configuration = new Configuration(environment);
4  configuration.addMapper(BlogMapper.class);
5  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);


 这种方式下的配置添加一个映射类(mapper class)。映射类是包含SQL 映射注解的Java 类,从而避免了使用XML。
 3.
 现在您已经创建了一个SqlSessionFactory(指上面的sqlMapper),正如它名字暗示那样,您可以通过它来创建一个SqlSession
实例。SqlSession 包含了所有执行数据库SQL 语句的方法。您能够直接地通过SqlSession 实例执行映射SQL 语句。例如:

1SqlSession session = sqlMapper.openSession();
2  try {
3   Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog"101);
4  }
 
5  finally 
6  {
7   session.close();
8  }


 现在有一个更简便的方式,那就是对给定的映射语句,使用一个正确描述参数与返回值的接口(如BlogMapper.class),您就能更清晰地执行类型安全的代码,从而避免错误和异常。

1 SqlSession session = sqlSessionFactory.openSession();
2  try {
3   BlogMapper mapper = session.getMapper(BlogMapper.class);
4   Blog blog = mapper.selectBlog(101);
5  }
 finally 
6  {
7   session.close();
8  }


 4.探索映射SQL 语句
 上面的例子中,映射语句已经在XML 配置文件或注解中定义;,所有MyBatis 提供的功能特性都可以通过基于XML 映射配置文件 配置来实现

 1<?xml version="1.0" encoding="UTF-8" ?>
 2   <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5  <mapper namespace="org.mybatis.example.BlogMapper">
 6   <select id="selectBlog" parameterType="int" resultType="Blog">//哈哈,参数类型,返回类型,就是一个方法
 7   select * from Blog where id = #{id}
 8   </select>
 9  </mapper>
10


   它定义了映射语句的名称“selectBlog”,在命名空间“org.mybatis.example.BlogMapper”,允许您通过指定完整类名“org.mybatis.example.BlogMapper”来访问上面的例子:
 Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
 这非常类似java 中通过完整类名来调用方法;这个名称可以直接映射到一个具在相同命名空间的映射类,这个映射类有一个方法的名称、参数及返回类型都与select映射语句相匹配。
 BlogMapper mapper = session.getMapper(BlogMapper.class);
 Blog blog = mapper.selectBlog(101);
 第二种方法有很多好处。第一,它不依赖于字符串,所以更安全。第二,如果您的IDE 有自动完成功能,您可以利用这功能很快导航到您的映射SQL 语句。第三,您不需要关注返回类型,不需要进行强制转换,因为使用BlogMapper 接口已经限定了返回 类型,它会安全地返回;

 对映射类还有一个更好的方法,就像前面的BlogMapper。它们的映射语句不需要完全在XML中配置。相反,它们可以使用Java 注解。例如上面的XML 配置可以替换为:

1 package org.mybatis.example;
2  public interface BlogMapper 
3  {
4   @Select("SELECT * FROM blog WHERE id = #{id}")
5   Blog selectBlog(int id);
6  }


 对简单的映射语句,使用注解可以显得非常地清晰。但是java 注解本身的局限难于应付更复杂的语句。如果您准备要做某些复杂的事情,最好使用XML 文件来配置映射语句。
 5.作用域和生命周期
  SqlSessionFactoryBuilder-一旦您创造了SqlSessionFactory 就不需要再保留它了。所以SqlSessionFactoryBuilder 实例的最好的作
  用域是方法体内(即一个本地方法变量)SqlSessionFactory-一旦创建,SqlSessionFactory 将会存在于您的应用程序整个运行生命周期中;SqlSessionFactory 最好的作用
  域范围是一个应用的生命周期范围;最简单的方式是使用Singleton 模式或静态Singleton 模式;,相反,您可能更愿意使用像Google Guice或Spring 的依赖注入方式。这些框架允许您创造一个管理器,用于管理SqlSessionFactory 的生命周期SqlSession-每个线程都有一个SqlSession 实例,SqlSession 实例是不被共享的,并且不是线程安全的;因此最好的作用域是request 或者method。决不要用一个静态字段或者一个类的实例字段来保存SqlSession 实例引用

1SqlSession session = sqlSessionFactory.openSession();
2  try {
3   // do work
4   }
 finally 
5   {
6   session.close();
7   }


   使用这一模式将保证所有的数据库资源被正确地关闭
 Mappers- 创建来绑定映射语句的接口,该Mapper 实例是从SqlSession 得到的。因此,所有mapper 实例的作用域跟创建它的SqlSession 一样。但是,mapper 实例最好的作用域是method,也就是它们应该在方法内被调用,使用完即被销毁;

1SqlSession session = sqlSessionFactory.openSession();
2  try {
3   BlogMapper mapper = session.getMapper(BlogMapper.class);
4   // do work
5  }
 finally
6  {session.close();}


 6.Mapper XML 配置
  MyBatis 的XML 配置文件包含了设置和影响MyBatis 行为的属性;下面为层次结构-
  • configuration
   o properties
   o settings
   o typeAliases
   o typeHandlers
   o objectFactory
   o plugins
   o environments
    

0 0
原创粉丝点击