Ibatis 实现 一对一 关联
习惯了Hibernate 一到公司,居然是Hibernate和Ibatis都在用..
?
没办法,开始学了...从最简单的一对一关系的映射开始(奉劝初学JavaEE的朋友,不要太依赖MyEclipse,我的教训啊..)
?
Ibatis 是一种java的持久层框架,映射文件的配置是基于Sql语句的,虽然配置比Hibernate复杂,但是会更灵活一些,效率也会高
?
1.创建实体类,跟Hibernate是一样的,相互做一对一的成员对象
public class User {private int userid;private String username;private String password;private UserInfo info;}public class UserInfo {private int userinfoid;private String email;private String qq;private User user;private int userid;}
?
?
记得添加setter 和 getter
2.创建Ibatis的配置文件
?
之前还要引入Ibatis的jar包 这里采用的是2.3.4版本的,3.0以上的跟2.x的区别很大
?
配置文件的DTD
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//E "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
?
一个简单的配置文件:
<?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" maxRequests="32" maxSessions="10"maxTransactions="5" useStatementNamespaces="false" /><transactionManager type="JDBC"><!-- 配置数据源 --><dataSource type="SIMPLE"><!-- 驱动的设置 --><property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /><!-- 数据库url的设置 --><property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test" /><!-- 数据库用户名的设置 --><property name="JDBC.Username" value="root" /><!-- 数据库密码的设置 --><property name="JDBC.Password" value="" /></dataSource></transactionManager><!-- 映射文件的列表 --><sqlMap resource="jpo/ibatis/test/o2o/user.sqlmap.xml" /></sqlMapConfig>
?
映射文件的配置
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN""http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="test"><!--为两个类设置映射文件--><typeAlias alias="user" type="jpo.ibatis.test.o2o.User" /><typeAlias alias="userinfo" type="jpo.ibatis.test.o2o.UserInfo" /><!--针对结果集的结果映射--><resultMap id="iuser" column="userid" /><result property="username" column="username" /><result property="password" column="password" /><!--得到User的时候,希望Ibatis为我同时取得UserInfo对象,并设置好 --><result property="info" column="userid" select="getUserInfoByUserId" /></resultMap><resultMap id="iuserinfo" column="userinfoid" /><result property="userid" column="userid" /><result property="email" column="email" /><result property="qq" column="qq" /></resultMap><!--一个查询,也可以是insert update 只需设置好对应的sql语句即可--><select id="getUserInfoByUserId" parameterresultMap="iuserinfo">select * fromuserinfowhere userid=#userid# </select><select id="getUserByUserId" parameterresultMap="iuser">select * fromuserwhere userid=#userid# </select></sqlMap>
? 测试类:
?
public static void main(String[] args) throws SQLException {Reader reader = null;try {reader = new InputStreamReader(new FileInputStream("src/jpo/ibatis/test/o2o/ibatis-config.xml"));} catch (FileNotFoundException e) {e.printStackTrace();}SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader);try {reader.close();} catch (IOException e) {e.printStackTrace();}User user = (User) client.queryForObject("getUserByUserId", 1);System.out.println(user.getUsername());UserInfo info = user.getInfo();System.out.println(info.getEmail());System.out.println("done...");}
?
?
这是一个ibatis的HelloWorld程序