一:
使用ibatis进行对数据进行操作
好处:数据库的配置和sql语句与程序是分开的,
1. 创建一个java项目,
2. 引入jar包:ibatis-2.3.4.726.jar ,mysql-connector-java-5.1.12-bin.jar
3. ibatis的配置文件,配置数据库和需要使用sqlXML
<?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>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://10.10.12.250:3306/uc?characterEncoding=utf8"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="root"/>
</dataSource>
</transactionManager>
<sqlMap resource="test/ibatis/sql.xml"/>
</sqlMapConfig>
4.准备需要的sql文件 sqlXML
<?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">
<!-- ibatis 输入参数 -->
<sqlMap namespace="User">
<select id="selectUser" resultClass="hashmap" parameterClass="int">
select * from uc_users where uid=#uid#
</select>
</sqlMap>
特别注意:xml的前面不能有任何字符甚至是注释和空格
5. java 使用ibatis进行数据的增删改查
package test.ibatis; import java.io.Reader; import java.util.Map; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class TestIbatis { public static void main(String[] args) throws Exception{ try{ //从配置文件中得到SqlMapClient对象 Reader reader = Resources.getResourceAsReader("sqlMapConf.xml"); SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); //查询用户数据 Map users = (Map) sqlMapper.queryForObject("selectUser", 5); System.out.println(users); }catch (Exception e) { System.out.println(e); } } }
二:对照直接查询mysql数据库,
该方式,数据库信息和sql语句是依赖于程序的,大项目里若修改必须重新编译,程序写的太死,可用性差
package inspur.data;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
/*sqlAPi主要作用是: 与数据库建立连接\发送 SQL 语句\处理结果*/
public class TestJavaConMysql {
static public void main(String [] arg){
/**
* 装载驱动程序Class.forName("com.mysql.jdbc.Driver")
* DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。
* Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。\
* Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
* Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。
* PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。
* CallableStatement:用以调用数据库中的存储过程。
* SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)
**/
try{
Connection cnn=null;
Class.forName("com.mysql.jdbc.Driver");
cnn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/uc_qingdao?user=root&password=&useUnicode=true&characterEncoding=utf-8");
String querySql="select * from uc_users where uid>2000 and uid<10000 ";
PreparedStatement stmt= cnn.prepareStatement(querySql);
ResultSet rs = stmt.executeQuery(querySql);
while(rs.next()){
System.out.println(rs.getInt("uid"));
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
三:与传统JDBC比较:
减少了61%的代码量
最简单的持久化框架,jar包只有300k,使用更简单主要定义一个主配置文件然后是各个子的sql文件,
sql代码从程序代码中彻底分离出来,可重用
可移植性强
四:
SqlMapClient 是一个接口,具体的实现类是SqlMapClientImp
可以映射定义好的javabean:
package test.ibatis;
import java.io.Reader;
import java.util.Map;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class TestIbatis {
public static void main(String[] args) throws Exception{
try{
//从配置文件中得到SqlMapClient对象
Reader reader = Resources.getResourceAsReader("sqlMapConf.xml");
SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
//查询用户数据,selectUser是sqlMap的id,后面是需要输入的参数
// Map users = (Map) sqlMapper.queryForObject("selectUser", 5);
// System.out.println(users);
//将ibatis的输出结果对应于javabean
User users = (User) sqlMapper.queryForObject("selectUser2", 5);
System.out.println(users.getUser_id());
}catch (Exception e) {
System.out.println(e);
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注意:xml的最前面左尖括号前面不能有任何字符串,包括空格和注释 -->
<!-- sql-map-2.dtd 标签库 -->
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<!-- ibatis 输入参数 -->
<sqlMap namespace="User">
<select id="selectUser" resultClass="hashmap" parameterClass="int">
select * from uc_users where uid=#uid#
</select>
<!-- resultClass="test.ibatis.User" 输出结果强转为提前定义好的javabean -->
<select id="selectUser2" resultClass="test.ibatis.User" parameterClass="int">
select user_id,uid,login_email from uc_users where uid=#uid#
</select>
</sqlMap>