看了一下官网。他的作用在于代码和sql语句分离。可以用xml写sql语句。自动根据代码生成灵活的sql语句。减少了界面大量的字符串和拼接动态sql的不灵活。另外可以根据提取的结果直接设置返回的结果为对象。。。。似乎。Mybatis For Net 更强大,吐槽下,Java的注释式编程,比C#的特性编程似乎差的有点远啊。。。。。。ok。接下来跟着官网的例子搞起来。。。。
说一下几个类先:SqlSessionFactoryBuilder(这是工厂类的祖先,一个程序基本用一次扔掉就可以了)
SqlSessionFacotry(用来生成连接的,一个就够了,用单例实现)
SqlSession(一次连接用一个,跟C#的SqlConnection差不多。。。。)
Mapper实例。(Session返回的东西,就是最底层的直接可以调用数据库的东西,可以调用接口方法。也是玩完就扔的。)
说下框架逻辑:
通过mybatis设置文件。XML格式的。一句话概括的话。应该是怎么连接数据源。获取SqlSessionFacotryBuilder。这种当然单例模式包装下。需要自己写。
然后通过Builder获取SqlSession单例对象。这个相当于一个连接,所以每次都要释放。
然后通过SqlSession获取实体类的Mapper对象,对象根据Mapper设置文件(mybatis设置文件中有引用)中设置的sql语句(可以用很多灵活的配置)获取数据,框架自动把获取的信息根据列名赋值到实体类。并且返回。当然这其中可以传参数之类的。。。。一般都是一个表一个实体类,一个mapper设置。
比JDBC直接用好在Sql语句可以配置,很灵活,并且可以根据列返回实体对象。不用自己一个一个属性去set了。
不说了。上核心代码:
第一个是创造factory的。用了单例
public class SqlHelper {
private static SqlSessionFactory factory;
public static SqlSessionFactory getFactory() throws IOException {
if (null == factory) {
String path = ("com/leiming/data/mybatis-config.xml");
InputStream input = Resources.getResourceAsStream(path);
factory = new SqlSessionFactoryBuilder().build(input);
}
return factory;
}
}
主程序:
public class App {
public static void main(String[] args) {
try {
SqlSessionFactory factory = SqlHelper.getFactory();
try (SqlSession session = factory.openSession()){
Person p = session.selectOne("com.leiming.data.PersonMapper.selectPerson",1004);
System.out.println(p.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
一个实体类,要自己写
public class Person{
private int personID;
public int getPersonID(){
return personID;
}
public void setPersonID(int value){
personID = value;
}
private int accountID;
public int getAccountID(){
return accountID;
}
public void setAccountID(int value){
accountID = value;
}
@Override
public String toString(){
return String.format("%d,%d",personID,accountID);
}
}
两个配置文件,也没什么花头。这个设置是mybatis的核心。因为内容太多,我们这里只是最最简单的调用。我们针对最核心的代码来演示。
mybatis设置,重要的在中间,所有的设置在官网可以看到。主要就是地址。驱动类什么的。和jdbc差不多。主要里面有mapper的引用。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=MyDB"/>
<property name="username" value="sa"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/leiming/data/PersonMapper.xml"/>
</mappers>
</configuration>
mapper配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.leiming.data.PersonMapper">
<select id="selectPerson" resultType="com.leiming.data.Person">select * from [leon].[Person] where PersonId = #{id}</select>
</mapper>
运行主程序就能读取数据了。具体怎么配置,不详细说了。官网都有。这里还是一个学习的记录吧。仅仅最核心的代码。
说下感觉:这个配置很多东西,比直接调用要复杂的多。好处在于实现和逻辑分离。编译过程很多次因为字符串的设置问题导致编译失败,运行失败。好在sqlserver驱动微软也提供了maven。获取很方便。
之后会做一些学习spring的学习过程记录。希望对新手有点用。