码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis新手入门一

时间:2017-07-31 23:01:56      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:private   cep   删除   需要   stack   style   driver   注解   .exe   

一丶Mybatis是什么?

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

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

二丶JDBC中编程的问题?

  public static void main(String[] args){
        //数据库连接
        Connection connection=null;
        Statement stat=null;
        //结果集
        ResultSet resultSet=null;
        
        //加载数据库驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //连接数据库
            connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis",
                    "root","root");
            String sql="select * from users";
            stat=connection.createStatement();
            resultSet=stat.executeQuery(sql);
            while(resultSet.next()){
                String username=resultSet.getString("name");
                int age=resultSet.getInt("age");
                System.out.println("username= "+username+", age"+age);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //释放资源
        finally{
            if(resultSet!=null)
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            if(stat!=null)
                try {
                    stat.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if(connection!=null)
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
        }
        
    }

  技术分享

  JDBC中存在的问题:1.将SQL语句硬编码到了java代码中,如果修改相应的SQL语句,就需要修改java代码然后重新编译,系统的可维护性不高。2.数据库频繁的开启和释放,对数据库资源是一种浪费。3.解析结果集中也存在硬编码问题。

三丶Mybatis框架

  利用Mybatis框架来进行简单的CRUD操作。

  po类User:

  public class User {
    //实体类的属性名和表字段一致
    private int id;
    private String name;
    private int age;
    
    
    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }


    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    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 namespace="zzl.test.mybatis.mapping.userMapping">
    <!--
        根据id查询得到一个user对象
     -->
    <select id="getUser" parameterType="int"
        resultType="zzl.test.mybatis.domain.User">
        select * from users where id=#{id}
    </select>
    <!--
        创建用户
     -->
     <insert id="addUser" parameterType="zzl.test.mybatis.domain.User">
       insert into users(name,age) values (#{name},#{age})
     </insert>
</mapper>
      namespace为这个Mapper指定一个唯一的命名空间,习惯上设置为包名+sql映射文件名,这样就能够保证namespace的唯一性。

   例如在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
    使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
    resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回。
    User类就是users表所对应的实体类


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/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="zzl/test/mybatis/mapping/userMapping.xml"/>
    </mappers>
</configuration>

测试类:

public class Test1 {
    @Test
    public void test1(){
        //配置文件
        String resource ="conf.xml";
        //使用类加载器加载mybatis配置文件
        InputStream in=Test1.class.getClassLoader().getResourceAsStream(resource);
        
        //构建Sqlsession工厂
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(in);
        SqlSession session=sessionFactory.openSession();
        String statement="zzl.test.mybatis.mapping.userMapping.getUser";
        User user=session.selectOne(statement,1);
        System.out.println(user);
    }
    @Test
    public void addUser(){
        //配置文件
        String resource ="conf.xml";
        //使用类加载器加载mybatis配置文件
        InputStream in=Test1.class.getClassLoader().getResourceAsStream(resource);
                
        //构建Sqlsession工厂
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(in);
        SqlSession session=sessionFactory.openSession();
        String statement="zzl.test.mybatis.mapping.userMapping.addUser";
        User user=new User();
        user.setName("hnn");
        user.setAge(24);
        session.insert(statement,user);
        session.commit();
        int id=user.getId();
        session.close();
        System.out.println(""+id);
    }
}
  查询用户:

  技术分享

  插入用户:

    技术分享

  

  从上面的程序可以看出Mybatis的运行过程,config.xml是Mybatis的全局配置文件,配置了Mybatis的运行环境等信息userMapper.xml是sql映射文件,在其中配置了操作数据库的sql语句。这个文件要在全局配置文件config.xml中进行加载。我们首先要通过全局配置文件构造SqlSessionFactory会话工厂,再由会话工厂创建sqlSession操纵数据库。删除和更新等操作和上述类似。

Mybatis新手入门一

标签:private   cep   删除   需要   stack   style   driver   注解   .exe   

原文地址:http://www.cnblogs.com/Tieyeye/p/7266053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!