zoukankan      html  css  js  c++  java
  • myBatis简单入门

    本文主要介绍一个如今比較流行的数据库操作框架Mybatis,仅仅是简单的介绍入门使用方法


    所有代码下载:

    Github链接:链接

    写文章不易。欢迎大家採我的文章,以及给出实用的评论。当然大家也能够关注一下我的github;多谢。

    1.MyBatis 是什么?

    MyBatis 是一款一流的支持自己定义 SQL、存储过程和高级映射的持久化框架。MyBatis 差点儿消除了所有的 JDBC 代码,也基本不须要手工去设置參数和获取检索结果。MyBatis 能够使用简单的XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和 POJOs(普通 java 对象)到数据库中的记录。

    2.建立project和导入jar包

    1. 建立javaproject。当然也能够动态webproject

    2. 带入jar包:

    主要两个包:mybatis-3.1.1.jar和mysql-connector-java-5.1.37-bin.jar

    01

    3.在mysql创建相应的表

    建立一个数据库表:students

    
    --mysql语法
    
    create table students(
       id  int(5) primary key,
       name varchar(10),
       sal double(8,2)
    );

    4.创建和表相应的实体类

    在project中建立student类

    
    public class Student {
    
        private Integer id;//编号
    
        private String name;//姓名
    
        private Double sal;//薪水
    
        public Student(){}
    
        public Student(Integer id, String name, Double sal) {
    
            this.id = id;
    
            this.name = name;
    
            this.sal = sal;
    
        }
    
    。

    。。。。 此处省略了getset方法

    5.在studnet类相应的包下建立StudentMapper.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"> <!-- namespace属性是名称空间。必须唯一,一般为类名 --> <mapper namespace="com.rlovep.hello.Student"> <!-- resultMap标签:映射实体与表 type属性:表示实体全路径名 id属性:为实体与表的映射取一个随意的唯一的名字 --> <resultMap type="com.rlovep.hello.Student" id="studentMap"> <!-- id标签:映射主键属性 result标签:映射非主键属性 property属性:实体的属性名 column属性:表的字段名 --> <id property="id" column="id"/> <result property="name" column="name"/> <result property="sal" column="sal"/> </resultMap> <!-- insert标签:要书写insert这么一个sql语句 id属性:为insert这么一个sql语句取一个随意唯一的名字 parameterType:要执行的dao中的方法的參数,假设是类的话,必须使用全路径类 --> <insert id="add1"> insert into students(id,name,sal) value(1,'peace',5000) </insert> <!-- <insert id="com.rlovep.hello.Student"> insert into students(id,name,sal) values(#{id},#{name},#{sal}) </insert> --> </mapper>

    6.在src文件夹下建立mybatis的配置文件mybatis.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>
    
    <!-- 设置一个默认的连接环境信息 -->
    
        <environments default="mysql_developer">
    
    
    
    
    
            <!-- 连接环境信息,取一个随意唯一的名字 -->
    
            <environment id="mysql_developer">
    
                <!-- mybatis使用jdbc事务管理方式 -->
    
                <transactionManager type="jdbc"/>
    
                <!-- mybatis使用连接池方式来获取连接 -->
    
                <dataSource type="pooled">
    
                    <!-- 配置与数据库交互的4个必要属性 -->
    
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
    
                    <property name="url" value="jdbc:mysql://localhost:3306/day01?

    useUnicode=true&amp;characterEncoding=UTF8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> <!-- 连接环境信息,取一个随意唯一的名字 --> <environment id="oracle_developer"> <!-- mybatis使用jdbc事务管理方式 --> <transactionManager type="jdbc"/> <!-- mybatis使用连接池方式来获取连接 --> <dataSource type="pooled"> <!-- 配置与数据库交互的4个必要属性 --> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/> <property name="username" value="$username"/> <property name="password" value="oracle.password"/> </dataSource> </environment> </environments> <!-- 载入映射文件--> <mappers> <mapper resource="com/rlovep/hello/StudentMapper.xml"/> </mappers> </configuration>

    7)创建MyBatisUtil.java类,并測试与数据库能否连接
    建立com.rlovep.util包。并在包下建立MyBatisUtil.java类(能够创建在不论什么地方)

    
    
    package com.rlovep.util;
    
    
    
    import java.io.IOException;
    
    import java.io.Reader;
    
    import java.sql.Connection;
    
    
    
    import org.apache.ibatis.io.Resources;
    
    import org.apache.ibatis.session.SqlSession;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    
    
    /**
    
     * 
    
     * @ClassName: MyBatisUtil
    
     * @Description: 创建单例工厂,能够获得线程session
    
     * @author peace w_peace12@163.com
    
     * @date 27 Mar 2016 10:01:45 pm
    
     *
    
     */
    
    public class MyBatisUtil {
    
        // 创建线程独立的session
    
        private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    
        // sqlsession 工厂
    
        private static SqlSessionFactory sqlSessionFactory;
    
    
    
        /**
    
         * 载入位于src/mybatis.xml配置文件
    
         */
    
        static {
    
            try {
    
                // 获得配置文件字符流
    
                Reader reader = Resources.getResourceAsReader("mybatis.xml");
    
                // 通过配置文件创建工厂
    
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    
    
    
            } catch (IOException e) {
    
                e.printStackTrace();
    
                throw new RuntimeException(e);
    
            }
    
        }
    
    
    
        /**
    
         * 
    
         * <p>
    
         * Title:
    
         * </p>
    
         * <p>
    
         * Description:禁止外界new 该工具类
    
         * </p>
    
         */
    
        private MyBatisUtil() {
    
    
    
        }
    
    
    
        /**
    
         * 获取session,线程独立
    
         */
    
        public static SqlSession getSqlsession() {
    
            // 从当前线程中获取SqlSession对象
    
            SqlSession sqlSession = threadLocal.get();
    
            // 假设SqlSession对象为空
    
            if (sqlSession == null) {
    
                // 在SqlSessionFactory非空的情况下。获取SqlSession对象
    
                sqlSession = sqlSessionFactory.openSession();
    
                // 将SqlSession对象与当前线程绑定在一起
    
                threadLocal.set(sqlSession);
    
            }
    
            // 返回SqlSession对象
    
            return sqlSession;
    
        }
    
    
    
        /**
    
         * 关闭SqlSession与当前线程分开
    
         */
    
        public static void closeSqlSession() {
    
            // 从当前线程中获取SqlSession对象
    
            SqlSession sqlSession = threadLocal.get();
    
            // 假设SqlSession对象非空
    
            if (sqlSession != null) {
    
                // 关闭SqlSession对象
    
                sqlSession.close();
    
                // 分开当前线程与SqlSession对象的关系。目的是让GC尽早回收
    
                threadLocal.remove();
    
            }
    
        }
    
        public static void main(String[] args) {
    
            Connection conn = MyBatisUtil.getSqlsession().getConnection();
    
            System.out.println(conn!=null?"连接成功":"连接失败");
    
        }
    
    }
    

    8.在student类的包下建立StudentDao.java类并測试

    
    
    public class StudentDao {
    
          public void add1()throws Exception{
    
              SqlSession sqlSession=null;
    
              try{
    
                  //获得sqlsession
    
                  sqlSession=MyBatisUtil.getSqlsession();
    
                  //默认事务開始
    
                  //调用在映射文件里声明的方法
    
                  int i=sqlSession.insert("com.rlovep.hello.Student.add1");
    
                  System.out.println("影响了"+i+"行");
    
                  //事务提交
    
                  sqlSession.commit();
    
    
    
              }catch(Exception e)
    
              {
    
                  e.printStackTrace();
    
                  //事务回滚
    
                  sqlSession.rollback();
    
                  throw e;
    
              }finally {
    
                MyBatisUtil.closeSqlSession();
    
            }
    
          }
    
          public static void main(String[] args) throws Exception{
    
            StudentDao dao=new StudentDao();
    
            dao.add1();
    
        }
    
    }
    

    9.測试例如以下

    控制台的输出例如以下:

    影响了1行

    数据库添加了一行

    02

    10开启log4j

    1.导入jar包:log4j-1.2.17.jar

    2.在src文件夹下:建立log4j.properties

    
    
    log4j.rootLogger=debug,stdout,logfile
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    
    log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
    
    log4j.appender.logfile=org.apache.log4j.FileAppender
    
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    
    log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
    
    log4j.logger.com.ibatis=DEBUG
    
    log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
    
    log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
    
    log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
    
    log4j.logger.java.sql.Connection=DEBUG
    
    log4j.logger.java.sql.Statement=DEBUG
    
    log4j.logger.java.sql.PreparedStatement=DEBUG
    

    3.直接执行就可以。不须要在配置,控制台显演示样例如以下:

    03

    好的本章介绍到这里
    来自伊豚wpeace(rlovep.com,blog.wpeace.cn)

  • 相关阅读:
    如何为你的Airtest报告自定义名称
    Go打包构建 生成32位64位应用程序 加入前端项目
    DNS解析与DNS缓存清理
    sharepoint2013安装记录
    C# winform自托管WebApi及身份信息加密、Basic验证、Http Message Handler、跨域配置
    IM扫码登录技术专题(四):你真的了解二维码吗?刨根问底、一文掌握!
    IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践
    阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
    使用oracle序列+oracle定时任务获取每月从1开始的流水码
    为什么我的数据库查询越来越慢
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7306184.html
Copyright © 2011-2022 走看看