这段时间,公司没有整活都是一些零碎的事情。
所以我才有时间写博客,与大家做技术共享。
今天 要说一下做java GUI变成时持久层如何使用ibatis或者说是mybatis.
这个例子使用的mysql数据库做演示。
1. 新建java Project等等这些问题就不说,主要说一下和ibatis框架相关的内容;
2. 首先要将ibatis.jar包导入到工程中;
3. 将mysql数据库驱动导入到工程;
4. 在src下新建sqlMapConfig.xml文件,文件中的代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig >
<settings
cacheModelsEnabled ="true"
enhancementEnabled ="true"
lazyLoadingEnabled ="true"
errorTracingEnabled ="true"
useStatementNamespaces ="false"
/>
<transactionManager type ="JDBC" > <!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) -->
<dataSource type ="SIMPLE" > <!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) -->
<property name ="JDBC.Driver" value ="com.mysql.jdbc.Driver" />
<property name ="JDBC.ConnectionURL" value ="jdbc:mysql://localhost:3306/gui" />
<property name ="JDBC.Username" value ="root" />
<property name ="JDBC.Password" value ="root" />
<property name ="Pool.MaximumActiveConnections" value ="10"/> <!-- 连接池维持的最大容量 -->
<property name ="Pool.MaximumIdleConnections" value ="5" /> <!-- 连接池允许挂起的最大连接 -->
<property name ="Pool.MaximumCheckoutTime" value ="120000" /> <!-- 连接被某个任务所允许占用的最大时间 -->
<property name ="TimeToWait" value ="500" /> <!-- 线程允许等待的最大时间 -->
</dataSource >
</transactionManager >
<sqlMap resource ="dbUtils/userMap.xml" />
</sqlMapConfig >
5. 关于上面的代码我就不一一讲解了,我只挑重点的数一下:
1) <property name ="JDBC.Driver" value ="com.mysql.jdbc.Driver" />这个是指定数据库驱动;
2)<property name ="JDBC.ConnectionURL" value ="jdbc:mysql://localhost:3306/gui" />这个是指定连接地址gui为数据库名称,这个数据库在数据库系统已经创建完成;
3)<property name ="JDBC.Username" value ="root" />这个是连接数据库系统的用户名;
4)<property name ="JDBC.Password" value ="root" />这个是连接数据库系统的密码;
6.新建文件夹dbUtils下面新建类BaseDb代码如下:
package dbUtils;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import practice.User;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class BaseDb {
private static SqlMapClient sqlMapClient = null;
public static SqlMapClient getSqlMapClient(){
InputStream inputStream = null;
try{
//这个路径是sqlMapConfig.xml文件所在的绝对路径,你也可以用相对路径。第一次写的时候不确定路径不碍事看程序报的错误,他会说在什么什么路径下找不到该文件,然后你就可以根据提示指引路径。
inputStream = new FileInputStream("E:\\workspace\\GUI\\src\\sqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(inputStream);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sqlMapClient;
}
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
List<User> list = BaseDb.getSqlMapClient().queryForList("findUserInfo");
if(list.isEmpty()){
System.out.println("ERROR");
} else {
System.out.println("SUCCESS");
for(User user : list){
System.out.println(user.getName());
}
}
}
}
7. 在dbUtils包下面新建userMap.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="dbUtils.userMap">
<typeAlias alias="User" type="practice.User" />
<select id="findUserInfo" parameterClass="map" resultClass="User">
SELECT
NUM ,
NAME ,
PASSWORD ,
SEX
FROM
USER
WHERE
NUM = #num#
AND PASSWORD = #password#
</select>
</sqlMap>
8. 这里是为了写sql语句的地方,看到那个id了吧,我在main方法里面有用到它,他的作用是告诉程序执行那个sql。
9. 看到上面的<sqlMap namespace="dbUtils.userMap">了吧,他是和sqlMapConfig.xml文件中<sqlMap resource ="dbUtils/userMap.xml" />对应着的,程序就跟小孩一样你不告诉他他也找不到。
10. 有上面的内容你应该已经知道如何和GUI程序管理了吧,如果还不清楚的话也不碍事。我会把我程序打包上传的资源里面,你可以下。我会把用到的jar包和源码都放进去。下面是我的工程目录截图,加油!