MyBatis如何连接数据库 |
您所在的位置:网站首页 › mybatis底层定义了什么接口来操作数据库 › 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 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); }此文是笔者初学乍练,准备不足之作,如有错误,欢迎向笔者提出,以避免笔者误导其他读者。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |