ibatis提供了pojo到数据库表的映射机制,程序员编写SQL语句和所需参数,通过映射配置文件,返回结果字段映射到指定的POJO
1.新建一个java project项目,项目添加两个jar包,一个是ibatis,一个是mysql数据库连接的jar包
2.两个包,com.bean和com.resource,resource这个包要右键,buld path——use as source folder,不然找不到配置文件
3.数据库连接相关配置,sqlmap_mysql.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- 基本设置 -->
<!-- cacheModelsEnabled:是否开启缓存机制 -->
<!-- enhancementEnabled:是否启用字节码增强机制 -->
<!-- errorTracingEnabled:是否启用错误处理机制 -->
<!-- lazyLoadingEnabled:是否启用延迟加载机制 -->
<!--
maxRequests:最大并发请求数
maxSessions:最大session数
maxTransactions:最大并发事物数
useStatementNamespaces:是否启用名称空间
-->
<settings cacheModelsEnabled="false" enhancementEnabled="false" errorTracingEnabled="false"
lazyLoadingEnabled="false" maxRequests="300" maxSessions="300"
maxTransactions="300" useStatementNamespaces="false"/>
<!-- 数据访问相关配置,transactionManager定义了ibatis的事务管理器,有3种(JDBC,JTA,EXTERNAL) -->
<transactionManager type="JDBC">
<!-- 数据源链接信息,type有3中类型(SIMPLE,DBCP,JNDI) -->
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/myWeb?characterEncoding=UTF-8" />
<property name="JDBC.Username" value="root" />
<property name="JDBC.Password" value="root" />
</dataSource>
</transactionManager>
<!-- 指定映射文件的位置 -->
<sqlMap resource="com/bean/user-mapping.xml"/>
</sqlMapConfig>
4.新建一个pojo,user.java
package com.bean;
/**
* 用户pojo
*
* @author mona
*
*/
public class User {
// id
private int id;
// 登录账号
private String username;
// 登录密码
private String password;
// 真是姓名
private String realname;
// 所在省份
private String province;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
}
5.新建一个用户pojo映射配置文件,user-mapping.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<!--设置映射类别名 -->
<typeAlias alias="User" type="com.bean.User"/>
<!-- 设置映射的字段,数据库字段和类属性映射 -->
<resultMap class="user" id="user.getuser">
<result column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password" />
<result column="realname" property="realname"/>
<result column="province" property="province"/>
</resultMap>
<!-- parameterClass:传入的参数类型,可以是对象,例如user,不区分大小写,也可以是Integer或者hashmap -->
<!-- 插入操作 -->
<insert id="insertUser" parameterClass="user">
<![CDATA[
INSERT INTO user( username, password, realname, province)
VALUES(#username#, #password#, #realname#, #province#)
]]>
</insert>
<!-- 删除操作 -->
<delete id="deleteUserByID" parameterClass="Integer">
DELETE FROM user WHERE id = #id#
</delete>
<!-- 修改操作 -->
<update id="updateUser" parameterClass="user">
UPDATE user SET username=#username#, password=#password#,
realname=#realname#, province=#province# where id = #id#
</update>
<!-- 根据ID查询单条信息,如果用resultMap,这里的值要和开始的resultMap中的id相同,如果要返回其他数据类型,用resultClass,例如<pre name="code" class="html">resultClass="HashMap"
--><select id="selectUserByID" parameterClass="Integer" resultMap="user.getuser">SELECT * FROM USER WHERE id = #id#</select></sqlMap>
</pre><pre>
6.最后写个测试类,测试效果
package com.bean;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class MainTest {
// main测试程序
public static void main(String[] args) throws SQLException {
SqlMapClient sqlMapClient = getSqlMapClient();
// 插入操作----------------------------------------------
/*
* User user = new User(); user.setId(2); user.setUsername("admin");
* user.setPassword("admin"); user.setRealname("管理员");
* user.setProvince("安徽省");
*/
// insertUser对应的是,user-mapping.xml文件中insert插入操作的id值
// sqlMapClient.insert("insertUser", user);
// 删除操作----------------------------------------------
int id = 2;
// sqlMapClient.delete("deleteUserByID", id);
// 修改操作----------------------------------------------
// sqlMapClient.update("updateUser", user);
// 查询操作----------------------------------------------
// Map user = (Map) sqlMapClient.queryForObject("selectUserByID", id);
// System.out.println(user.get("realname"));
User user = (User) sqlMapClient.queryForObject("selectUserByID", id);
System.out.println(user.getRealname());
}
/**
* SqlMapClient,ibatis接口,对sql执行和批处理
*
* @return
*/
public static SqlMapClient getSqlMapClient() {
SqlMapClient sqlMapClient;
// 加载数据库连接配置文件
String resource = "sqlmap_mysql.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
sqlMapClient = null;
e.printStackTrace();
}
return sqlMapClient;
}
}