关于myBatis的介绍,我就多讲了,主要写下的内容是代码,还有一些我碰到的问题
1.配置文件Configuration.xml:
<?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>
<!-- 这里是设置对应类的别名,为了省去每次调用时加的包名 -->
<typeAliases>
<typeAlias alias="User" type="myBatisTest.User"/>
</typeAliases>
<environments default="development">
<!-- 这里是用来设置对应数据库的内容,包括驱动,url,用户名,密码 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/softcal" />
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 这里用来设置对应mapper文件的路径,为了方便我把它放到了和Configuration.xml的相同目录下面 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
2.映射器xml文件 UserMapper.xml:
<?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适用的命名空间,在使用class时貌似没什么特别大的用处,当使用接 口的时候是接口对应的地址 -->
<mapper namespace="myBatisTest.UserOperation">
<!-- id一定要与对应的接口中的函数名对应 -->
<select id="selectUserByID" parameterType="int" resultType="User">
select * from user where user_id = #{user_id}
</select>
</mapper>
这两步一般是使用myBatis框架都会做的事(好像很多内容都可以在注解中做了,但是我对注解不是特别熟悉,就不尝试了)。接下来如何在Java代码中体现呢?
3.代码程序访问myBatis:
1)类实现:
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static{
try{
reader =Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
}
public User selectUserByID(int id){
SqlSession session=sqlSessionFactory.openSession();
User user;
try{
user=(User)session.selectOne("UserMapper.selectUserByID", id);
System.out.println(user);
}finally{
session.close();
}
return user;
}
主要的内容其实就是先加载Configuration.xml文件,然后创建一个SqlSessionFactory,利用这个工厂类创建session,通过session来访问数据库。我猜想框架源码中通过工厂类封装了数据库的连接这些模板代码,session对象类似于我们在jdbc中使用的statement对象的封装,在我们调用close关闭这个session对象时,框架帮你关闭数据库连接之类的工作。
2)接口实现:
public interface UserOperation {
public User selectUserByID(int user_id);
}
没错,只用这一点代码,调用时就用如下代码就可以了
SqlSession session =sqlSessionFactory.openSession();
try{
UserOperation userOperation =session.getMapper(UserOperation.class);
User user =userOperation.selectUserByID(3);
System.out.println(user);
//session.commit();
}finally{
session.close();
}
的确省去了很多不方便的数据库连接代码,我自己重构之前写过的一些代码,之前一个DAO类大概会有200行左右吧,用myBatis写完之后大概会到100左右,我还想把一些公共的部分提取出来作为工具类,那样会更少。总之,还不错。
在做demo的时候犯过的错:
1.在使用类实现的时候传递多个参数到myBatis框架一直都不对,尝试了网上的注解还是不可以,然后用接口实现,完全没有这个问题了,建议用接口
2.在写映射器文件的时候,会有奇怪的问题,报出无法找到XX属性,可以利用序号来在xml文件中可以利用序号传递参数,这样会避免这个问题
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。