ORM架构的通用方式:
1:从配置文件中读取定义的sessionfactory。
2:用sessionfactory生成session
3:利用session做增删改查
4:commit sql语句操作。
5:关闭session。
半自动化ORM框架mybatis
mybatis学习 :
新增Configuration.xml。所有配置在configuration中配置,
配置typealias别名
配置environment 在environment中配置transactionManager,type="jdbc",其中的dataSource设置type="POOLED"或者type="SAMPLE"
配置mappers,设置实体与数据库映射的xml
定义一个interface,里面定义所有的抽象方法都是正删改查的抽象方法。例如IUserOperation
设置model,model里都是实体类。get和sset方法。和数据库一一对应。例如User类。 //必须要有无参构造方法,不然根据UserMapper.xml中的配置,在查询数据库时,将不能反射构造出User实例 (JAVA默认会给个无参构造)
User类定义一个同名的xml文档,在xml文档中指定namespace.指向interface:IUserOperation
定义一些增删改查的语句。
<!-- 这里namespace必须是interface:IUserOperation 接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”-->
例如:
<select id="selectUserByID" parameterType="int" resultType="User">
select * from `user` where id = #{id}
</select>
--------------------------------------------------------------------------------
<!-- 为了返回list 类型而定义的returnMap -->
<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="userName" property="userName" />
<result column="userAge" property="userAge" />
<result column="userAddress" property="userAddress" />
</resultMap>
--------------------------------------------------------------------------------
<!--执行增加操作的SQL语句。id和parameterType
分别与IUserOperation接口中的addUser方法的名字和
参数类型一致。以#{name}的形式引用Student参数
的name属性,MyBatis将使用反射读取Student参数
的此属性。#{name}中name大小写敏感。引用其他
的gender等属性与此一致。seGeneratedKeys设置
为"true"表明要MyBatis获取由数据库自动生成的主
键;keyProperty="id"指定把获取到的主键值注入
到Student的id属性-->
<insert id="addUser" parameterType="User"
useGeneratedKeys="true" keyProperty="id">
insert into user(userName,userAge,userAddress)
values(#{userName},#{userAge},#{userAddress})
</insert>
-------------------------------------------------------------
<!-- User 联合文章进行查询 方法之一的配置 (多对一的方式) -->
<resultMap id="resultUserArticleList" type="Article">
<id property="id" column="aid" />
<result property="title" column="title" />
<result property="content" column="content" />
<association property="user" javaType="User">
<id property="id" column="id" />
<result property="userName" column="userName" />
<result property="userAddress" column="userAddress" />
</association>
</resultMap>
定义测试方法/DAO
引用import org.apache.ibatis.session.SqlSessionFactory;
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static{
try{
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSessionFactory getSession(){
return sqlSessionFactory;
}
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class); //拿到所有的增删改查抽象方法。
User user = userOperation.selectUserByID(1);
System.out.println(user.getUserAddress());
System.out.println(user.getUserName());
} finally {
session.close();
}
}
引用ApplicationContext (import org.springframework.context.ApplicationContext;)
得到配置和数据源 ctx = new ClassPathXmlApplicationContext("applicationContext.xml");