聊聊、Mybatis 第一篇

一、API
Mybatis到底解决了什么问题,持久化框架是什么,没出现Mybatis之前我们又是怎么来操作数据库的呢?
对于Java语言来说,JDBC标准是比较底层的了,但并非最底层的,可以说JDBC是Java对于数据库操作的一层封装。
先来看看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<ChannelManageDto> list = session.selectList("com.rockcode.www.mapper.CommonMapper.queryAllChannels");
这样看,好像代码多了,看不出有什么好处呢,暂时还看不出来,有一个疑问,没有SQL语句吗?看下面
public interface CommonMapper {
@Select("select * from t_distributor")
List<ChannelManageDto> queryAllChannels();
}
好处其实很明显,Mybatis把返回的数据做了封装,不用自己再去封装ChannelManageDto了。实质上做了映射,这就是持久化框架做的事。
但是,感觉数据源和业务没有完全分离,很乱。

猜你喜欢

转载自www.cnblogs.com/xums/p/10305350.html