MyBatis如何连接数据库

在学习Mybatis时我们应该先知道为什么要学习mybatis,mybatis有什么,mybatis能做什么?

        MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。

 在此可以引出一个问题什么是半自动化的ORM呢?

  • ORM(对象关系映射):利用对象和数据库之间映射的数据,把Java程序中的对象持久化到数据库中的表内。
  •  
  • 这里的“半自动化”,是相对 Hibernate 等提供了全面的数据库封装机制的“全自动化”ORM 实现而言,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。而 MyBatis 的着力点,则在于 POJO 与 SQL 之间的映射关系。也就是说,MyBatis 并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。使用 ibatis 提供的 ORM 机制,对业务逻辑实现人员而言,面对的是纯粹的 Java 对象,这一层与通过 Hibernate 实现 ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成 SQL 语句,而 MyBatis 则要求开发者编写具体的 SQL 语句。相对 Hibernate 等“全自动”ORM 机制而言,ibatis 以 SQL 开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,MyBatis 的出现显得别具意义。

  • ------------------------以上文字部分来自其他路径 https://www.w3cschool.cn/mybatis 有需要可自行查询--------------------------------
  • 我们可以再说一下mybatis的优缺点:
  •  优点:1.简单易学
  •             2.消除了大量的JDBC过多的代码
  •             3.良好的性能
  •             3.友好的Spring集成支持
  •             4.友好的第三方缓存类库集成支持
  • 缺点:1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
  •             2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
  •             3、缓存机制不佳

    -------mybatis连接数据库进行操作数据-------

        mybatis的核心概念中含有:核心对象、核心配置文件、sql映射文件。

一、导入jar包



以下是项目的结构

如果使用myeclipse等工具注意jar包放在lib文件里

要下载的jar包(官方):

mysql驱动 jar包:https://dev.mysql.com/downloads/connector/j/


junit测试 jar包:https://junit.org/junit4/


mybatis jar包:https://github.com/mybatis


log4j日志文件 jar包:http://logging.apache.org/log4j/2.x/download.html


<dependencies>
        <dependency>
            <!--日志文件所用的jar包-->
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <!--mysql驱动包-->
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.28</version>
        </dependency>
        <dependency>
            <!--mybatisjar包-->
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <!--测试所用的jar包-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>

log4j所用代码可以从官网找到
log4j.rootLogger=DEBUG,CONSOLE,file  
log4j.logger.cn.smbms.dao=debug  
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  
log4j.logger.java.sql.ResultSet=debug  
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug  
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
log4j.appender.Threshold=error  
log4j.appender.CONSOLE.Target=System.out  
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n  
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender  
log4j.appender.file.DatePattern=yyyy-MM-dd  
log4j.appender.file.File=log.log  
log4j.appender.file.Append=true  
log4j.appender.file.Threshold=error  
log4j.appender.file.layout=org.apache.log4j.PatternLayout  
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n  
log4j.logger.com.opensymphony.xwork2=error

创建database.properties文件



二、

以下是我项目的结构

如果使用myeclipse等工具注意jar包放在lib文件里



对应数据表创建一个pojo实体对象

public class Tuser {
    private Integer id;
    private String userName,password,nickName;

    @Override
    public String toString() {
        return "Tuser{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
}

三、创建mybatis的配置文件mybatis-config.xml

<configuration>
    <!--调用database.properties文件-->
    <properties resource="database.properties"></properties>
    <!--选择log4j日志存储文件-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--类型别名-->
    <typeAliases>
        <typeAlias alias="Tuser" type="cn.jdbc.entity.Tuser"></typeAlias>
    </typeAliases>
   <environments default="dvr">
       <environment id="dvr">
           <!--事务管理器  选择jdbc获取事务-->
           <transactionManager type="JDBC"></transactionManager>
           <!--数据源有POOLED 和UNPOLED可选择是否使用数据源-->
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"></property>
               <property name="url" value="${jdbc.url}"></property>
               <property name="username" value="${jdbc.username}"></property>
               <property name="password" value="${jdbc.password}"></property>
           </dataSource>
       </environment>
   </environments>
    <mappers>
        <!--mappers是映射器,把mapper文件加入到配置文件中-->
        <mapper resource="cn/jdbc/dao/TuserMapper.xml"></mapper>
    </mappers>
</configuration>

四、创建上面的TuserMapper.xml(Sql映射wenj)

<mapper namespace="cn.jdbc.dao.TuserMapper">
    <!--避免因为数据库与程序中变量出现不同名,会出现差误。所以使用resultMap-->
    <resultMap id="userMap" type="Tuser">
        <id property="id" column="id"></id>
        <result property="userName" column="user_name"></result>
        <result property="password" column="password"></result>
        <result property="nickName"  column="nick_name"></result>
    </resultMap>

        测试类

 @Test
    public void QueryCount() {
        String source="mybatis-config.xml";
        int count=0;
        SqlSession sqlSession=null;

        try {
            //1 获取mybatis-config.xml的输入流
            InputStream is = Resources.getResourceAsStream(source);
            //2 创建一个工厂,完成对配置文件的读取
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
            //3 创建sqlSession,开启工厂
            sqlSession=sqlSessionFactory.openSession();
            //4 根据放入工厂的sql语句执行不同的方法
            count=sqlSession.selectOne("com.bdqn.dao.TUserMapper.queryCount");
        System.out.println(count);
} catch (IOException e) { e.printStackTrace(); }finally { sqlSession.close(); } }}
@Test
        public void queryALLTest(){
            SqlSession sqlSession=null;

            try {
             //1 获取mybatis-config.xml的输入流
            InputStream is = Resources.getResourceAsStream(source);
            //2 创建一个工厂,完成对配置文件的读取
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
            //3 创建sqlSession,开启工厂
            sqlSession=sqlSessionFactory.openSession();
            //4 根据放入工厂的sql语句执行不同的方法

以上测试类的方法有很多的冗余代码,我们可以抽取冗余的代码建一个工具类:

          注意: 导的包要注意
package cn.jdbc.util;

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 java.io.IOException;
import java.io.InputStream;

public class MybatisUtil {
    private  static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession createSqlSession(){
        return sqlSessionFactory.openSession();
    }

    public static void closeSqlSession(SqlSession sqlSession){
        if(sqlSession!=null){
            sqlSession.close();
        }
    }
}

首先创建一个TuserMapper接口,注意要和TuserMapper.xml同名

public interface TuserMapper {  
    //查询全部用户信息  
    List<Name> queryAll();  
  
    //模糊查询,查询通过用户名查询用户信息  
    List<Name> getUserListByUserName(String name);  
    //修改数据  
    public Integer updateTuser(Name name);  
    //删除用户数据  
    Integer deleteTuserByid(Integer id);  
  
    //插入数据  
    Integer addTuser(Name name);  
}  

        测试类

//获取全部用户信息  
       public void queryAll(){  
               SqlSession sqlSession=null; 
               sqlSession=MybatisUtil.createSqlSession();  
               //第一种方法  通过全限定名获取信息  
             //  List<Tuser> n=sqlSession.selectList("cn.jdbc.dao.TuserTest.queryAll");  
               //第二种方法  通过接口返回信息引入映射文件中  
               List<Name> n=sqlSession.getMapper(TuserMapper.class).queryAll();  
               if(n!=null){  
                   for (Name tuser : n) {  
                       System.out.println(tuser);  
                   }  
               }  
   }  
//添加  
   public void addTuser(){  
       SqlSession sqlSession=null;  
       Tuser user=new Tuser();
       user.setUserName("admin");
       user.setPassword("121212");
       user.setNickName("mingming");
       int rows=0;  
  
       sqlSession = MybatisUtil.createSqlSession();  
       rows=sqlSession.getMapper(TuserMapper.class).addTuser(name);  
       sqlSession.commit();  
       if(rows>0){  
           System.out.println("添加成功");  
       }else{  
           System.out.println("添加失败");  
       }  
       MybatisUtil.closeSqlSession(sqlSession);  
   }  
//修改  
  public void testUpdateTuser(){  
      SqlSession sqlSession=null; 

       Tuser user=new Tuser();
       user.setUserName("admin33");
       user.setPassword("00000");
       user.setId(002);  
     user.setNickName("ming");
//删除  
   public void testDeletTuserByid(){  
       SqlSession sqlSession=null;  
       int delete=0;  
       sqlSession = MybatisUtil.createSqlSession();  
       delete=sqlSession.getMapper(TuserMapper.class).deleteTuserByid(1);  
       sqlSession.commit();  
       if(delete>0){  
           System.out.println("删除成功");  
       }else{  
           System.out.println("删除失败");  
       }  
       MybatisUtil.closeSqlSession(sqlSession);  
   }  

    此文是笔者初学乍练,准备不足之作,如有错误,欢迎向笔者提出,以避免笔者误导其他读者。



  • 27
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值