设为首页 加入收藏

TOP

数据库连接教程之从JDBC到MyBatis(一)
2018-03-20 08:51:15 】 浏览:247
Tags:数据库 连接 教程 JDBC MyBatis

摘要

因为有持久层框架,和Spring的存在,越来越多的人对数据库连接这块不甚了解,只知使用方便,不知其原理。所以写一个数据库连接的系列文章,总结下本人在数据库连接方面遇到的问题,和对数据库连接的理解。

JDBC

jdbc:Java DataBase Connectivity,Java 数据库连接,一套标准的Java API,用来执行SQL语句。这套命名应该是很老了,毕竟将Data Base直接映射成了关系型数据库,或者说,像我之前在介绍NoSQL数据库时多次提到的,NoSQL数据库还没有一套统一的访问标准语句。

jdbc的作用就是将SQL变成了Java API 访问。

        Connection conn = null;
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/test?"
                + "user=root&password=123456&useUnicode=true&characterEncoding=UTF8";
        conn = DriverManager.getConnection(url);
        Statement stmt = conn.createStatement();
        String sql = "select *from post where user_id=1";
        ResultSet resultSet = stmt.executeQuery(sql);
        List
  
    posts = new ArrayList<>();
        while (resultSet.next()) {
            Post post = new Post();
            post.setId(resultSet.getLong("id"));
            post.setTitle(resultSet.getString("title"));
            post.setContents(resultSet.getString("contents"));
            posts.add(post);
        }
        stmt.close();
        conn.close();
  

其中Connection,DriverManager,Statement这些类都是jdk提供的,不依赖其他的jar。jdk提供了一套通用的SQL访问API,但是各个数据库并不相同,有各自的标准,所以各个针对MySQL,Oracle提供了不同的驱动。比如MySQL的驱动。

        
  
            
   
    mysql
   
            
   
    mysql-connector-java
   
            
   
    5.1.9
   
        
  

执行Class.forName(“com.mysql.jdbc.Driver”);加载MySQL驱动

DriverManager.registerDriver(new Driver());

这段代码中包含了所有的基本的数据库操作对象

连接url

连接: 数据库Server通信与服务的通信

statement:把 SQL 语句发送到 DBMS

ResultSet : 数据库操作返回结果

后续的其他扩展,都是基于以上各个部分的扩展

获取connection,构建statement,执行时Java操作数据库最基本的操作,以后的所有扩展都围绕这个。

从上面的代码中我们可以看到这只是一个hello world,在实际开发中,有很多的数据库操作,如果每个都写一个,那重复代码太多了

Spring-Template–解决重复代码

将1的url封装成了一个DataSource对象

@Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource("jdbc:mysql://localhost:3306/test?"
                + "user=root&password=123456&useUnicode=true&characterEncoding=UTF8");
    }
    @Bean
    public JdbcTemplate jdbcTemplate() {
        return  new JdbcTemplate(dataSource());
    }

将3 Statement重复代码解决了

@Service
public class JdbcTemplateService {
    @Autowired
    private JdbcTemplate mJdbcTemplate;

    public void queryById(long userId) {
        String sql = "select * from post where user_id = " + userId;
        List
  
    result =mJdbcTemplate.query(sql, new PostRowMapper());
    }

    class PostRowMapper implements RowMapper
   
     { public Post mapRow(ResultSet rs, int rowNum) throws SQLException { Post post = new Post(); post.setId(rs.getLong("id")); post.setTitle(rs.getString("title")); post.setContents(rs.getString("contents")); return post; } } } 
   
  

解决了连接获取,查询重复语句的问题,

但是没有解决对象映射的问题,需要为每个数据库对象生成独自的Mapper

那么JdbcTemplate是如何做到的呢

连接池

持久层框架-mybatis

虽然有了JdbcTemplate,但是还缺乏一些操作,比如对象映射,查询数据的时候希望自动映射到对象上,

另外需要自动生成SQL语句,不需要进行SQL的拼接,赋值。

mybatis的介绍

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

重点在于避免了所有的JDBC代码,和手动设置参数以及获取结果集

构建一个SqlSessionFactory

    @Bean
    public SqlSessionFactory sqlSessionFactory() {
        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Environment environment = new Environment("development", transactionF
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SQL同义词和链接服务器演示讲解 下一篇Iterator和for...of的实例讲解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目