zoukankan      html  css  js  c++  java
  • Hello Mybatis 01 第一个CRUD

    What's the Mybatis?

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis iBATIS一词来源于internet”abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL MapsData Access ObjectsDAO).

    自己使用mybatis有大半年了,相比较厚重的hibernate和其他orm框架,mybatis更加的灵活轻巧,可以更好的配合数据库和sql语句来开发项目。

    这篇开始,我希望可以写一个关于mybatis的快速教程,除了mybatis,中间还会贯穿一些mysql的资料和mybatis与其他框架的配置,这个系列也算是自己这段时间对使用mybatis框架的一个总结。

    环境搭建

    我使用的环境有

      mysql:mysql5.5.37

      jdk:openjdk1.7

      eclipse:java ee-Kepler Service Release 2

     

    我们还需要在mysql数据库中建立一个名字叫做blogschema,并建立一个user表

    1 CREATE TABLE `blog`.`user` (
    2   `id` INT NOT NULL AUTO_INCREMENT,
    3   `name` VARCHAR(45) NULL,
    4   `age` INT NULL,
    5   PRIMARY KEY (`id`));

     

     还要记得给这个表加几条数据哟

    1 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('Mybatis', '4');
    2 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('struts2', '7');
    3 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('hibernate', '13');

     

    接着我们在eclipse中新建一个web项目。

    jdbc的驱动包mysql-connector-java-5.1.30-bin.jar放置到web-inf下的lib文件夹中去。

    再到mybatisgithub的主页上下载mybatisjar包.

    https://github.com/mybatis/mybatis-3/releases

    我使用的版本是3.2.3(最新的版本是3.2.7 

    当然,你也可以使用maven来管理mybatis的包,只需要在项目的pom.xml中添加.

    1 <dependency>
    2   <groupId>org.mybatis</groupId>
    3   <artifactId>mybatis</artifactId>
    4   <version>3.2.3</version>
    5 </dependency>

     

    第一个CRUD

    我们在pro.app下新建一个model包,新建一个user类与数据库相对应的vo类。

     1 package pro.app.model;
     2 
     3 public class User {
     4     private int id;
     5     private String name;
     6     private int age;
     7     public User(){}
     8     public User(String name, int age) {
     9         this.name = name;
    10         this.age = age;
    11     }
    12     public int getId() {
    13         return id;
    14     }
    15     public void setId(int id) {
    16         this.id = id;
    17     }
    18     public String getName() {
    19         return name;
    20     }
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24     public int getAge() {
    25         return age;
    26     }
    27     public void setAge(int age) {
    28         this.age = age;
    29     }
    30 }

     

    pro.app.inter下建立UserDAO接口,在这个接口中定义一个根据id找到User的方法selectOne()

     

    1 package pro.app.inter;
    2 import org.apache.ibatis.annotations.Param;
    3 
    4 import pro.app.model.User;
    5 
    6 public interface UserDAO {
    7     public User selectOne(@Param("id")Integer id);
    8 }

    pro.app.mapper下建立UserMapper.xml文件。

    1 <?xml version="1.0" encoding="UTF-8" ?>
    2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4 <mapper namespace="pro.app.inter.UserDAO">
    5     <select id="selectOne" parameterType="int" resultType="User">
    6         select * from user where id = #{id,jdbcType=INTEGER}
    7     </select>
    8 </mapper>

    <select></select>标签对来定义对应UserDAO中的selectOne()方法需要执行的sql语句。这也是mybatis的核心功能。

     现在我们还需要在src源目录下放置一个Configuration.xml文件用于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>
        <typeAliases>
            <typeAlias alias="User" type="pro.app.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://localhost:3306/blog?useUnicode=true&amp;characterEncoding=utf-8"/>
                    <property name="username" value="mybatis"/>
                    <property name="password" value="mybatis"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper   resource="pro/app/mapper/UserMapper.xml"/>
        </mappers>
    </configuration>

     在配置文件中通过定义现在的environment , 来指定目前的开发状态,用jdbc作为事务和连接池的配置与mysql数据库相链接。

     在mappers下写入需要用到的mybatis 需要用到的mapper文件。

     

     现在我们可以建立一个类测试mybatis是不是工作了,在pro.test下建立一个userTest类。

     1 package pro.app.test;
     2 
     3 import java.io.Reader;
     4 
     5 import org.apache.ibatis.io.Resources;
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.apache.ibatis.session.SqlSessionFactory;
     8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     9 
    10 import pro.app.inter.UserDAO;
    11 import pro.app.model.User;
    12 
    13 public class UserTest {
    14     private static SqlSessionFactory sqlSessionFactory;
    15     private static Reader reader; 
    16     static{
    17         try{
    18             reader= Resources.getResourceAsReader("Configuration.xml");
    19             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    20         }catch(Exception e){
    21             e.printStackTrace();
    22         }
    23     }
    24     public static SqlSessionFactory getSession(){
    25         return sqlSessionFactory;
    26     }
    27     public static void main(String[] args) {
    28         SqlSession session = sqlSessionFactory.openSession();
    29         try {
    30             UserDAO userDao = session.getMapper(UserDAO.class);
    31             User user = userDao.selectOne(1);
    32             System.out.println("name : "+user.getName());
    33             System.out.println("age : "+user.getAge());
    34         } finally {
    35             session.close();
    36         }
    37     }
    38 }

    在这个程序中,我们通过io类库中的Reader类来读取mybatis的相关配置文件,并且使用mybatis里的 SqlSessionFactoryBuilder类构建一个SqlSessionFactory。

    这个SqlSessionFactory就相当与mybatis配置文件的化生了,对应各种被操作的类而言,它就是整个项目中的上帝了,上帝不能老是出现吧,所以一般在一个项目中指挥有一个SqlSessionFactory出现。接着我们的程序又通过SqlSessionFactory来获得一个SqlSession,SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法。通过这个SqlSession的实例化对象,可以获得UserDAO接口的一个实例,接下来就可以执行相应的方法了。

    来运行这个程序啦,控制台输出了以下内容

    1 name : mybatis
    2 age : 4

     bingo!我们如愿通过mybatis获得了数据库的数据。

     

     接下来我们可以在UserDAOUserMapper中添加其他的配置完成CRUD的任务。

     UserMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     4 <mapper namespace="pro.app.inter.UserDAO">
     5     <select id="selectOne" parameterType="int" resultType="User">
     6         select * from user where id = #{id,jdbcType=INTEGER}
     7     </select>
     8     <insert id="insertOne" parameterType="User">
     9         insert into user (name,age)
    10         values(
    11             #{name,jdbcType=VARCHAR},
    12             #{age,jdbcType=INTEGER}
    13         )
    14     </insert>
    15     <delete id="deleteOne" parameterType="java.lang.Integer" >
    16         delete from user
    17         where id = #{id,jdbcType=INTEGER}
    18     </delete>
    19     <update id="updateOne" parameterType="User">
    20     update user
    21     set name=#{name,jdbcType=VARCHAR},
    22     age=#{age,jdbcType=INTEGER}
    23     where id= #{id,jdbcType=INTEGER}
    24    </update>
    25 </mapper>

    UserDAO.java

     1 package pro.app.inter;
     2 import org.apache.ibatis.annotations.Param;
     3 
     4 import pro.app.model.User;
     5 
     6 public interface UserDAO {
     7     public User selectOne(@Param("id")Integer id);
     8     
     9     public void insertOne(User user);
    10     
    11     public void deleteOne(@Param("id")Integer id);
    12     
    13     public void updateOne(User user);
    14 }

    select方法一样,通过updatedeleteinsert标签分别对updateOne()deleteOne()insertOne()方法,并编写相应的接口方法来实现对应的CRUD任务。

    总结

    通过一个简单的CRUD例子熟悉mybatis的基本实现。

     

  • 相关阅读:
    Python中的结构化数据分析利器-Pandas简介
    A great tutorial with Jupyter notebook for ML beginners
    快速修改Matlab默认启动路径(Windows/Mac)
    十大opengl教程
    vtk 基础概念
    OpenGL入门学习
    glut glew区别
    测试程序
    说说C语言运算符的“优先级”与“结合性”
    c++ ACM常用函数
  • 原文地址:https://www.cnblogs.com/whthomas/p/3761543.html
Copyright © 2011-2022 走看看