ibatis的简单运用
首先:ibatis跟hibernate一样都是ORM,hibernate是全自动化,而ibatis是半自动化,hibernate的sql语句都是规定好的,你只能调用而不能自己写,很方便,但是有些时候不能按照自己的想法来,而ibatis就是自己书写sql语句。
由于我用的maven+ibatis,所以jar包是直接在maven上下的,用的是ibatis2的版本,下面是我的项目样本:
首先你需要建一个jdbc.properties的jdbc的配置文件,用来连接数据库:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/caoke?characterEncoding=utf8
jdbc.username=root
jdbc.password=sasa
一定记得导连接数据库的jar包,我用的是mysql,所以是com.mysql.jdbc.Driver
第二行是数据库的具体位置,问号后的转换数据的格式,防止中文乱码
第三行是root的数据库账号
第四行是数据库的登录密码
(每一行后面绝对不能留空格,不然会报错,作者在这里栽了一个大坑!!!)
接下来 是iBatis的配置文件SqlMapConfig.xml,这里面需要声明数据库连接的属性信息,数据源配置信息,映射文件等信息。先看个例子,其中属性含义先不必深究,当然也可以去google:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="jdbc.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driverClassName}" />
<property name="JDBC.ConnectionURL" value="${jdbc.url}" />
<property name="JDBC.Username" value="${jdbc.username}" />
<property name="JDBC.Password" value="${jdbc.password}" />
</dataSource>
</transactionManager>
<sqlMap resource="com/entity/User.xml" />
</sqlMapConfig>
实体类这种细节我就没解释了,配置完上面两个文件就完成了所有的配置文件,我们就要进行数据库操作了,当然iBatis本身的SQL语句也是写在映射文件中的,那么就要看User.xml了
<sqlMap>
<typeAlias alias="User" type="com.entity.user" />
<select id="getAllUsers" resultClass="User">
select * from user
</select>
</sqlMap>
typeAlias标签是设置别名用的,这里我们使用了一个Bean叫做User,声明别名后,在文件的后续部分可以直接使用别名而不用再给出完整类型了,非常方便,如select标签中的resultClass属性。
这个配置我们使用的是Bean作为返回的结果类型,当然也可以使用Map,非常灵活。Select的id是标识该SQL语句的标识符,要在应用程序中使用到,必须唯一。Select标签体内的部分就是SQL语句了,当然这里是最简单的示例。
最后就是应用程序,写法也很简单。首先是加载iBatis的配置文件,然后使用SqlMapClient接口提供的方法进行数据操作:
public static void main(String[] args) throws Exception {
String config = "com/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(config);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List<user> list = sqlMap.queryForList("getAllUsers");
for (user user : list) {
System.out.println(user.getName());
}
}