MyBatis如何连接数据库

您所在的位置:网站首页 mybatis底层定义了什么接口来操作数据库 MyBatis如何连接数据库

MyBatis如何连接数据库

2024-06-26 10:38:49| 来源: 网络整理| 查看: 265

在学习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

log4j log4j 1.2.12 mysql mysql-connector-java 5.1.28 org.mybatis mybatis 3.2.8 junit junit 4.10

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 四、创建上面的TuserMapper.xml(Sql映射wenj)         测试类 @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 queryAll(); //模糊查询,查询通过用户名查询用户信息 List 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 n=sqlSession.selectList("cn.jdbc.dao.TuserTest.queryAll"); //第二种方法 通过接口返回信息引入映射文件中 List 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); }

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



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭