博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊、Mybatis API
阅读量:5297 次
发布时间:2019-06-14

本文共 3985 字,大约阅读时间需要 13 分钟。

API 


  Mybatis 到底解决了什么问题,持久化框架是什么,没出现 Mybatis 之前我们又是怎么来操作数据库的呢?

对于 Java语言 来说,JDBC标准 是比较底层的了,但并非最底层的,可以说 JDBCJava 对于数据库操作的一层封装。
先来看看 JDBC 实现 Mysql 数据库操作:

 

Class.forName("com.mysql.jdbc.Driver");Connection con = DriverManager.getConnection("url", "username", "password");Statement st = con.createStatement();ResultSet rs = st.executeQuery("sql");int age = rs.getInt("age");String name = rs.getString("name");

 

  获取到所有的字段数据以后,然后自己封装到相应的实体类里面。

ChannelManageDto u = new ChannelManageDto();u.setUserName(name);u.setAge(age);

  是不是很麻烦,确实有点。这里还没涉及到事务问题,不然更复杂了。

  再来看看 Mybatis 实现 Mysql 数据库操作:

 

DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("");dataSource.setUrl("");dataSource.setUsername("");dataSource.setPassword("");TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment("development", transactionFactory, dataSource);Configuration configuration = new Configuration(environment);configuration.setLazyLoadingEnabled(true);configuration.setEnhancementEnabled(true);configuration.getTypeAliasRegistry().registerAlias(Blog.class);configuration.getTypeAliasRegistry().registerAlias(Post.class);configuration.getTypeAliasRegistry().registerAlias(Author.class);configuration.addMapper(CommonMapper.class);SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(configuration);SqlSession session = factory.openSession();List
list = session.selectList("com.rockcode.www.mapper.CommonMapper.queryAllChannels");

 

这样看,好像代码多了,看不出有什么好处呢,暂时还看不出来,有一个疑问,没有 SQL语句 吗?看下面

public interface CommonMapper { @Select("select * from t_distributor") List
queryAllChannels(); }

  好处其实很明显,Mybatis 把返回的数据做了封装,不用自己再去封装 ChannelManageDto 了。实质上做了映射,这就是持久化框架做的事。

但是,感觉数据源和业务没有完全分离,很乱。

XML 


  先来看看 JDBC 实现 Mysql 数据库操作:

  创建 spring-db.xml,里面包含

  这里呢,以前是写在代码里面的,现在放到配置文件里面。

 

ApplicationContext context = new ClassPathXmlApplicationContext("spring-db.xml");DataSource dataSource = (DataSource) context.getBean("dataSource");Connection con = (Connection) dataSource.getConnection();Statement st = con.createStatement();ResultSet rs = st.executeQuery("select * from t_distributor");

 

  接下来处理和上面 API 是一样,自己封装 ChannelManageDto

  还可以用 JdbcTemplateSimpleJdbcTemplateNamedParameterJdbcTemplate 来处理,spring-db.xml 加入

   这里和上面又有些不一样了,这三种一般 SimpleJdbcTemplate 用的多。会一种就行了

 

List
list = simpleJdbcTemplate.query("select * from t_distributor", new RowMapper
() { @Override public ChannelManageDto mapRow(ResultSet rs, int rowNum) throws SQLException { ChannelManageDto dto = new ChannelManageDto(); dto.setChannelName(rs.getString("name")); /** * TODO */return dto;}}, 1);

 

  其实呢,这种方式还是得自己封装 ChannelManageDto,总之 JDBC 需要自己动手。

  再来看看 Mybatis 实现 Mysql 数据库操作:

  创建 mybatis-config.xml,里面包含

  那么和 API 方式有什么不同呢?来看看

 

String resource = "mybatis-config.xml";Reader inputStream;try {inputStream = Resources.getResourceAsReader(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();List
> list = session.selectList("com.rockcode.www.mapper.CommonMapper.queryAllChannels");} catch (IOException e) {}

 

  还有另外一种方式,将上面的  <package name="com.rockcode.www.mapper"></package>  改成  <mapper resource="mappers/CommonMapper.xml"/>

  这种方式,彻底将 SQL语句Mapper 接口分离了,像 CommonMapper

public interface CommonMapper {// @Select("select * from t_distributor") List
queryAllChannels();}

  已经不需要 @Select

  再来看看 CommonMapper.xml,这里面配置了 SQL语句

  好了,通过上面的文字,我们仅仅实现了 APIXML 方式,但是还有更简单的。那就是 Mybatis-Spring

转载于:https://www.cnblogs.com/xums/p/10305350.html

你可能感兴趣的文章
清除浮动
查看>>
c# 微信开发 《获取用户的信息》
查看>>
Bootstrap3组件--1
查看>>
FJUT第四次周赛E题题解
查看>>
jQuery的滚动监听
查看>>
Linux_scp
查看>>
pku 3624 Charm Bracelet 01背包 (入门题)
查看>>
《深入理解计算机系统》第七章读书笔记
查看>>
java序列化方式性能比较
查看>>
spring boot 下websocket实现的两种方法
查看>>
在Azure上部署Windows Server Core
查看>>
结对项目:四则运算程序测试
查看>>
js闭包
查看>>
bzoj 4784: [Zjoi2017]仙人掌【tarjan+树形dp】
查看>>
Shell中常用的语句
查看>>
jeeplus 多选框
查看>>
day42
查看>>
jq 常用语句
查看>>
隐藏VS2013的反馈、通知和登录按钮
查看>>
从首页问答标题到问答详情页
查看>>