zoukankan      html  css  js  c++  java
  • MyBatis入门(一)---基本使用

    一、MyBatis简介

    1.1、概述

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。

    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

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

    1.2、ORM

    orm工具的基本思想
    无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
    1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
    2. 由sessionfactory  产生 session
    3. 在session 中完成对数据的增删改查和事务提交等.
    4. 在用完之后关闭session 。

    5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。

    二、环境搭建

    2.1、所需要Jar包

     要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

    2.2、建立数据库与插入数据

    这里使用MySql数据库:

    CREATE TABLE `mybatis`.`user` (
      `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
      `name` VARCHAR(45) NOT NULL DEFAULT '无名氏' COMMENT '用户名',
      `age` TINYINT(3) NOT NULL DEFAULT 21 COMMENT '用户年龄',
      `birthday` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '用户生日',
      `address` VARCHAR(256) NOT NULL DEFAULT '北京' COMMENT '用户地址',
      PRIMARY KEY (`id`)  COMMENT '')
    COMMENT = '用户表';
    insert into user(id,name,age,birthday,address)
    values(1,'张三',23,'1990-01-23 20:24:21','上海'),(2,'李四',18,'1986-12-23 12:13:11','广州'),(3,'张五',33,'1975-09-23 02:13:11','上海'),(4,'王六',27,'1984-11-01 11:23:14','重庆'),(5,'张三丰',108,'1971-01-02 02:12:11','武当');

    2.3、建立Web项目把Jar包引入项目

    三、建立配置文件,实体类,与接口

    3.1、建立实体类

    /**  
    
    * @Title: User.java
    
    * @Package com.pb.mybatis.po
    
    * @Description: TODO(用户类)
    
    * @author 刘楠 
    
    * @date 2015-10-26 下午5:42:13
    
    * @version V1.0  
    
    */
    package com.pb.mybatis.po;
    
    import java.util.Date;
    
    /**
     * @ClassName: User
    
     * @Description: TODO(用户类)
    
     * @author  刘楠 
    
     * @date 2015-10-26 下午5:42:13
    
     *
    
    
     */
    public class User {
        
        /**
         * id(用户ID)
         */
        private int id;
        /**
         * name(用户名)
         */
        private String name;
        /**
         *age (用户年龄)
         */
        private int age;
        /**
         * birthday(用户生日)
         */
        private Date birthday;
        /**
         * address (用户地址)
         */
        private String address;
        /**
         * @return the id
         */
        public int getId() {
            return id;
        }
        /**
         * @param id the id to set
         */
        public void setId(int id) {
            this.id = id;
        }
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
        /**
         * @return the age
         */
        public int getAge() {
            return age;
        }
        /**
         * @param age the age to set
         */
        public void setAge(int age) {
            this.age = age;
        }
        /**
         * @return the brithday
         */
        public Date getBirthday() {
            return brithday;
        }
        /**
         * @param brithday the brithday to set
         */
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        /**
         * @return the address
         */
        public String getAddress() {
            return address;
        }
        /**
         * @param address the address to set
         */
        public void setAddress(String address) {
            this.address = address;
        }
        
    
    }

    3.2、写实体类接口

    /**  
    
    * @Title: UserMapper.java
    
    * @Package com.pb.mybatis.dao
    
    * @Description: TODO(用一句话描述该文件做什么)
    
    * @author 刘楠 
    
    * @date 2015-10-26 下午5:45:13
    
    * @version V1.0  
    
    */
    package com.pb.mybatis.dao;
    
    import com.pb.mybatis.po.User;
    
    /**
     * @ClassName: UserMapper
    
     * @Description: TODO(用户类数据访问接口)
    
     * @author  刘楠 
    
     * @date 2015-10-26 下午5:45:13
    
     *
    
    
     */
    public interface UserMapper {
        /**
         * 
         * @Title: selectUserById
        
         * @Description: TODO(根据用户ID查询)
        
         * @param id
         * @return User
         */
        public User selectUserById(int id);
    
    }

    3.3、与db.properties

     db.properties

    #数据库基本配置
    #驱动
    driver=com.mysql.jdbc.Driver
    #连接url
    url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
    #用户名
    username=root
    #密码
    password=root

    3.4、建立映射文件与configuration.xml配置

     UserMapper.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命名空间要写接口的全路径  -->
    <mapper namespace="com.pb.mybatis.dao.UserMapper">
    <!--ID要与接口中的方法名相同   parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径-->
    <select id="selectUserById" parameterType="int" resultType="com.pb.mybatis.po.User">
    select * from user
    where id=#{id}
    </select>
    </mapper>

    configuration.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="db.properties"/>
    <!--配置环境  -->
    <environments default="development">
    <environment id="development">
    <!--事务管理  -->
    <transactionManager type="JDBC"/>
    <!--数据源 通过Properties加载配置 -->
    <dataSource type="POOLED">
    <!--驱动driver  -->
    <property name="driver" value="${driver}"/>
    <!--连接URL  -->
    <property name="url" value="${url}"/>
    <!--用户名  -->
    <property name="username" value="${username}"/>
    <!--密码  -->
    <property name="password" value="${password}"/>
    </dataSource>
    </environment>
    </environments>
    <!--建立映射  -->
    <mappers>
    <mapper resource="com/pb/mybatis/dao/UserMapper.xml"/>
    </mappers>
    </configuration>

    3.5、简单根据ID查询

    /**  
    
    * @Title: Test1.java
    
    * @Package com.pb.mybatis.test
    
    * @Description: TODO(用一句话描述该文件做什么)
    
    * @author 刘楠 
    
    * @date 2015-10-26 下午5:55:54
    
    * @version V1.0  
    
    */
    package com.pb.mybatis.test;
    
    import java.io.IOException;
    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;
    
    import com.pb.mybatis.dao.UserMapper;
    import com.pb.mybatis.po.User;
    
    /**
     * @ClassName: Test1
    
     * @Description: TODO(测试类)
    
     * @author  刘楠 
    
     * @date 2015-10-26 下午5:55:54
    
     *
    
    
     */
    public class Test1 {
        //Session工厂
        static SqlSessionFactory sqlSessionFactory=null;
        //Session
        static SqlSession session=null;
        //字符流
        static Reader reader=null;
        
        public static void main(String[] args) {
            
            selectById();
        }
        /**
         * 
         * @Title: selectById
        
         * @Description: TODO(根据ID查找用户)
         void
         */
        public static void selectById(){
            //加载配置文件
            try {
                reader=Resources.getResourceAsReader("configuration.xml");
                //建立SqlSessionFactory
                sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
                //打开Session
                session=sqlSessionFactory.openSession();
                //获取用户接口对象
                UserMapper userMapper=session.getMapper(UserMapper.class);
                //调用查询方法
                User user=userMapper.selectUserById(1);
                System.out.println(user.getName()+"..."+user.getAge()+"..."+user.getBirthday().toLocaleString()+"..."+user.getAddress());
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    
    }

    3.6、使用别名

     

    <!--使用别名  -->
    <typeAliases>
    <!--用户类别名  -->
    <typeAlias type="com.pb.mybatis.po.User" alias="User"/>
    </typeAliases>

    更改mapper.xml中的User类的路径 为别名

    <?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命名空间要写接口的全路径  -->
    <mapper namespace="com.pb.mybatis.dao.UserMapper">
    <!--ID要与接口中的方法名相同   parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径-->
    <select id="selectUserById" parameterType="int" resultType="User">
    select * from user
    where id=#{id}
    </select>
    </mapper>

    测试类不变

    3.7、使用resultMap

    在mapper.xml中使用resultMap

    <?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命名空间要写接口的全路径  -->
    <mapper namespace="com.pb.mybatis.dao.UserMapper">
    
    <!--结果映射 不区另大小写,建议数据库的列写为大写  -->
    <resultMap type="User" id="userMap">
    <!--主键  -->
    <id property="id" column="ID"/>
    <!--姓名  -->
    <id property="name" column="NAME"/>
    <!--年龄  -->
    <id property="age" column="AGE"/>
    <!--生日  -->
    <id property="birthday" column="BIRTHDAY"/>
    <!--地址  -->
    <id property="address" column="ADDRESS"/>
    </resultMap>
    
    <!--ID要与接口中的方法名相同   parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名,  resultMap写已经有的映射2都只能同时有一个-->
    <select id="selectUserById" parameterType="int" resultMap="userMap">
    select * from user
    where id=#{id}
    </select>
    </mapper>

    测试类不变

    四、实现基本的增、删、改、查

    4.1、在接口中增加,模糊查询,添加,修改,删除的方法,

    /**  
    
    * @Title: UserMapper.java
    
    * @Package com.pb.mybatis.dao
    
    * @Description: TODO(用一句话描述该文件做什么)
    
    * @author 刘楠 
    
    * @date 2015-10-26 下午5:45:13
    
    * @version V1.0  
    
    */
    package com.pb.mybatis.dao;
    
    import java.util.Date;
    import java.util.List;
    
    import com.pb.mybatis.po.User;
    
    /**
     * @ClassName: UserMapper
    
     * @Description: TODO(用户类数据访问接口)
    
     * @author  刘楠 
    
     * @date 2015-10-26 下午5:45:13
    
     *
    
    
     */
    public interface UserMapper {
        /**
         * 
         * @Title: selectUserById
        
         * @Description: TODO(根据用户ID查询)
        
         * @param id
         * @return User
         */
        public User selectUserById(int id);
    
        /**
         * 
         * @Title: selectUserLikeName
        
         * @Description: TODO(根据姓名模糊查询)
        
         * @param name
         * @return List<User>
         */
        public List<User> selectUserLikeName(String name);
        
        /**
         * 
         * @Title: addUser
        
         * @Description: TODO(添加用户)
        
         * @param user void
         */
        public void addUser(User user);
        /**
         * 
         * @Title: updateUser
        
         * @Description: TODO(修改用户)
        
         * @param user void
         */
        public void updateUser(User user);
        /**
         * 
         * @Title: deleteUser
        
         * @Description: TODO(删除用户)
        
         * @param id void
         */
        public void deleteUser(int id);
    }

    4.2、在mapper.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命名空间要写接口的全路径  -->
    <mapper namespace="com.pb.mybatis.dao.UserMapper">
    
    <!--结果映射 不区另大小写,建议数据库的列写为大写  -->
    <resultMap type="User" id="userMap">
    <!--主键  -->
    <id property="id" column="ID"/>
    <!--姓名  -->
    <id property="name" column="NAME"/>
    <!--年龄  -->
    <id property="age" column="AGE"/>
    <!--生日  -->
    <id property="birthday" column="BIRTHDAY"/>
    <!--地址  -->
    <id property="address" column="ADDRESS"/>
    </resultMap>
    
    <!--ID要与接口中的方法名相同   parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名,  resultMap写已经有的映射2都只能同时有一个-->
    <select id="selectUserById" parameterType="int" resultMap="userMap">
    select * from user
    where id=#{id}
    </select>
    <!--根据姓名模糊查询  -->
    <select id="selectUserLikeName" parameterType="String" resultMap="userMap">
    select * from user
    where name like "%"#{name}"%"
    </select>
    
    <!--添加用户  useGeneratedKeys使用数据的增序列 keyProperty将增加后的用户ID返回-->
    <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    insert into user(name,age,birthday,address)
    values(#{name},#{age},#{birthday},#{address})
    </insert>
    <!--修改更新  -->
    <update id="updateUser" parameterType="User">
    update user set name=#{name},age=#{age},birthday=#{birthday},address=#{address}
    where id=#{id}
    </update>
    <!--删除  -->
    <delete id="deleteUser" parameterType="int">
    delete from user
    where id=#{id}
    </delete>
    </mapper>

    4.3、测试类

    /**  
    
     * @Title: Test1.java
    
     * @Package com.pb.mybatis.test
    
     * @Description: TODO(用一句话描述该文件做什么)
    
     * @author 刘楠 
    
     * @date 2015-10-26 下午5:55:54
    
     * @version V1.0  
    
     */
    package com.pb.mybatis.test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    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 com.pb.mybatis.dao.UserMapper;
    import com.pb.mybatis.po.User;
    
    /**
     * @ClassName: Test1
     * 
     * @Description: TODO(测试类)
     * 
     * @author 刘楠
     * 
     * @date 2015-10-26 下午5:55:54
     * 
     * 
     */
    public class Test1 {
        // Session工厂
        static SqlSessionFactory sqlSessionFactory = null;
        // Session
        static SqlSession session = null;
        // 字符流
        static Reader reader = null;
    
        public static void main(String[] args) {
    
            
        }
    
        /**
         * 
         * @Title: selectById
         * 
         * @Description: TODO(根据ID查找用户) void
         */
        public static void selectById() {
            // 加载配置文件
            try {
                reader = Resources.getResourceAsReader("configuration.xml");
                // 建立SqlSessionFactory
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                // 打开Session
                session = sqlSessionFactory.openSession();
                // 获取用户接口对象
                UserMapper userMapper = session.getMapper(UserMapper.class);
                // 调用查询方法
                User user = userMapper.selectUserById(1);
                System.out.println(user.getName() + "..." + user.getAge() + "..."
                        + user.getBirthday().toLocaleString() + "..."
                        + user.getAddress());
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 
         * @Title: selectLikeName
         * 
         * @Description: TODO(根据用户名模糊查询) void
         */
        public static void selectLikeName() {
            // 加载配置文件
            try {
                reader = Resources.getResourceAsReader("configuration.xml");
                // 建立SqlSessionFactory
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                // 打开Session
                session = sqlSessionFactory.openSession();
                // 获取用户接口对象
                UserMapper userMapper = session.getMapper(UserMapper.class);
                // 调用查询方法
                List<User> users = userMapper.selectUserLikeName("张");
                for (User user : users) {
                    System.out.println(user.getName() + "..." + user.getAge()
                            + "..." + user.getBirthday().toLocaleString() + "..."
                            + user.getAddress());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
        /**
         * 
         * @Title: addUser
        
         * @Description: TODO(添加用户)
         void
         */
        public static void addUser() {
            // 加载配置文件
            try {
                reader = Resources.getResourceAsReader("configuration.xml");
                // 建立SqlSessionFactory
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                // 打开Session
                session = sqlSessionFactory.openSession();
                // 获取用户接口对象
                UserMapper userMapper = session.getMapper(UserMapper.class);
                // 声明新用户
                User user =new User();
                user.setName("呵呵");
                user.setAge(22);
                String d="1984-09-23 20:23:22";
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
                Date date=sdf.parse(d);
                user.setBirthday(date);
                user.setAddress("不知道是哪的");
                userMapper.addUser(user);
                System.out.println("插入后的ID"+user.getId());
                //提交事务
                session.commit();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        /**
         * 
         * @Title: updateUser
        
         * @Description: TODO(修改用户)
         void
         */
        public static void updateUser() {
            // 加载配置文件
            try {
                reader = Resources.getResourceAsReader("configuration.xml");
                // 建立SqlSessionFactory
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                // 打开Session
                session = sqlSessionFactory.openSession();
                // 获取用户接口对象
                UserMapper userMapper = session.getMapper(UserMapper.class);
                // 调用查询方法
                User user = userMapper.selectUserById(6);
                user.setName("想起 来叫什么了");
                user.setAddress("魔都上海");
                //更新
                userMapper.updateUser(user);
                //提交事务
                session.commit();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
        public static void detleUser() {
            // 加载配置文件
            try {
                reader = Resources.getResourceAsReader("configuration.xml");
                // 建立SqlSessionFactory
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                // 打开Session
                session = sqlSessionFactory.openSession();
                // 获取用户接口对象
                UserMapper userMapper = session.getMapper(UserMapper.class);
            
                //删除
                userMapper.deleteUser(6);
                //提交事务
                session.commit();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }

  • 相关阅读:
    用户使用调查报告
    Beta总结
    Beta冲刺Day7
    Beta冲刺Day6
    Beta冲刺Day5
    Beta冲刺Day4
    Beta冲刺Day3
    Beta冲刺Day2
    Beta冲刺Day1
    Beta预备
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4911791.html
Copyright © 2011-2022 走看看