zoukankan      html  css  js  c++  java
  • (整理)MyBatis入门教程(一)

    本文转载:

    http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383

    本人文笔不行,根据上面博客内容引导,自己整理了一些东西

    首先给大家推荐几个网页:

    http://blog.csdn.net/isea533/article/category/2092001    没事看看 - MyBatis工具:www.mybatis.tk

    http://www.mybatis.org/mybatis-3/zh/getting-started.html  入门

    http://www.mybatis.tk/

    http://mbg.cndocs.tk/

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

    一、理解什么是MyBatis?

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.

      1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
      2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
      3)mybatis与hibernate的对比?

       mybatis提供一种“半自动化”的ORM实现。
       这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

        而mybatis的着力点,则在于POJO与SQL之间的映射关系。

    二、简单例子(快速入门)

    1)首先建立项目java web

    2)配置mybatis所需的jar包,pom.xml

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.35</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.8</version>
            </dependency>

            <!-- logback start -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.7</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.3</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-access</artifactId>
                <version>1.1.3</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.3</version>
            </dependency>
            <!-- logback end -->

     3)创建数据库数据(mybatis),创建表(t_user)

    CREATE TABLE `t_user` (
      `id` int(11) NOT NULL auto_increment,
      `username` varchar(20) default NULL,
      `password` varchar(20) default NULL,
      `account` double(10,2) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 

    4)mysql驱动配置文件mysql.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis
    jdbc.username=admin
    jdbc.password=123456

    5)添加mybatis配置文件mybatis.cfg.xml

    <?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>
    
      <!-- 引入外部配置文件 -->
      <properties resource="mysql.properties"></properties>
      
      <!-- 为JAVA Bean起类别名 -->
       <typeAliases >
            <!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
            <typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
            <!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
            <package name="com.wenyin.mybatis.beans"/>
       </typeAliases>
       <!-- 配置mybatis运行环境 -->
         <environments default="cybatis">
            <environment id="cybatis">
                <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
                <transactionManager type="JDBC" />
                
                <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
                <!-- POOLED 表示支持JDBC数据源连接池 -->
                <!-- UNPOOLED 表示不支持数据源连接池 -->
                <!-- JNDI 表示支持外部数据源连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments> 
        
         
         <mappers>
            <!-- 告知映射文件方式1,一个一个的配置
            <mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
            <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
            <package name="com/wenyin/mybatis/mapper"/>
        </mappers>
         
    </configuration>

    6)创建对应的实体对象

    7)创建方法接口UserMapper.java和定义操作t_user表的sql映射文件UserMapper.xml

    提供简单的增删改查数据信息。

    package com.wenyin.mybatis.mapper;
    import java.util.List;
    import com.wenyin.mybatis.beans.UserBean;
    public interface UserMapper {
        /**
         * 新增用戶
         * @param user
         * @return
         * @throws Exception
         */
        public int insertUser(UserBean user) throws Exception;
        /**
         * 修改用戶
         * @param user
         * @param id
         * @return
         * @throws Exception
         */
        public int updateUser (UserBean user,int id) throws Exception;
         /**
          * 刪除用戶
          * @param id
          * @return
          * @throws Exception
          */
        public int deleteUser(int id) throws Exception;
        /**
         * 根据id查询用户信息
         * @param id
         * @return
         * @throws Exception
         */
        public UserBean selectUserById(int id) throws Exception;
         /**
          * 查询所有的用户信息
          * @return
          * @throws Exception
          */
        public List<UserBean> selectAllUser() throws Exception;
    }

    UserMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 不写会报错 -->
    <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.wenyin.mybatis.mapper.UserMapper">
    <!-- 自定义返回结果集 -->
       <resultMap id="userMap" type="UserBean">
            <id property="id" column="id" javaType="java.lang.Integer"></id>
            <result property="username" column="username" javaType="java.lang.String"></result>
            <result property="password" column="password" javaType="java.lang.String"></result>
            <result property="account" column="account" javaType="java.lang.Double"></result>
        </resultMap>
    <!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,
    resultType属性指明查询返回的结果集类型-->    
    <!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys 
         方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 
    oracle 不支持应该设置成 useGeneratedKeys="false" 不然会报错
    --> <!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 --> <!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 --> <insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> insert into t_user (username,password,account) values (#{username},#{password},#{account}) </insert> <update id="updateUser" > update t_user set username=#{username},password=#{password},account=#{account} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from t_user where id=#{id} </delete> <select id="selectUserById" parameterType="int" resultMap="userMap"> select * from t_user where id=#{id} </select> <select id="selectAllUser" resultMap="userMap"> select * from t_user </select> </mapper>

    这时需要为mybatis.cfg.xml里注册UserMapper.xml文件。

    参照第5)步骤

    8)需要建立一个工具类文件

    package com.wenyin.mybatis.tools;
    
    import java.io.Reader;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class DBTools {
        public static SqlSessionFactory sessionFactory;
        
        static{
            try {
                //使用MyBatis提供的Resources类加载mybatis的配置文件
                Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
                //构建sqlSession的工厂
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        //创建能执行映射文件中sql的sqlSession
        public static SqlSession getSession(){
            return sessionFactory.openSession();
        }
        
    }

    9)写个测试UserService.java

    package com.wenyin.mybatis.service;
    
    import java.util.List;
    import org.apache.ibatis.session.SqlSession;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.wenyin.mybatis.beans.UserBean;
    import com.wenyin.mybatis.mapper.UserMapper;
    import com.wenyin.mybatis.tools.DBTools;
    
    public class UserService {
    
        private static Logger logger = LoggerFactory.getLogger(UserService.class); 
        public static void main(String[] args) {
            insertUser();
            //deleteUser(1);
            //selectUserById(2);
            //selectAllUser();
        }
    
        
        /**
         * 新增用户
         */
        private static boolean  insertUser(){
            SqlSession session = DBTools.getSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
            UserBean user = new UserBean("test01", "123456", 7000.0);
            try {
                int index=mapper.insertUser(user);
                boolean bool=index>0?true:false;
                logger.error("新增用户user对象:{},操作状态:{}",new Object[]{user,bool});
                 session.commit();
                 return bool;
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
                return false;
            }finally{
                session.close();
            } }
    /** * 删除用户 * @param id 用户ID */ private static boolean deleteUser(int id){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { int index=mapper.deleteUser(id); boolean bool=index>0?true:false; logger.debug("根据用户id:{},操作状态{}",new Object[]{id,bool}); session.commit(); return bool; } catch (Exception e) { e.printStackTrace(); session.rollback(); return false; }finally{
                session.close();
            } }
    /** * 根据id查询用户 * @param id */ private static void selectUserById(int id){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { UserBean user= mapper.selectUserById(id); logger.debug("根据用户Id:{},查询用户信息:{}",new Object[]{id,user}); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{
                session.close();
            } }
    /** * 查询所有的用户 */ private static void selectAllUser(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { List<UserBean> user=mapper.selectAllUser(); logger.debug("获取所用的用户:{}",user); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{
                session.close();
            } } }

    新增运行结果:

    如果返回Map<String,Object>
        <select id="getMap" resultType="java.util.HashMap" parameterType="int">
            select username,id from
            t_user where
            id=#{id}
        </select>


      返回List<Map<String,Object>> 
        <select id="getList" resultType="java.util.HashMap" >
             SELECT * FROM t_user
        </select>

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/kevin1990/p/6231122.html
Copyright © 2011-2022 走看看