由于项目需要转手做Java开发,对公司的项目了解之后,自己配置了一个简单的页面。
其中使用到的技术主要有:
- Spring MVC
- FreeMarker
- MyBatis
- Maven
- Ajax
MyBatis
以上都已经了解过,这里整理一下项目中MyBatis的使用。
参考:http://www.cnblogs.com/xdp-gacl/p/4271627.html
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
使用mybatis作为持久层框架,将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。将查询的结果集,自动映射成java对象。
需要
spring-dao.xml:
- 1.数据库连接池;
- 2.sqlsessisonFactory对象,扫描实体类,mapper文件;
- 3.dao接口包,配置扫描dao接口包,动态时间dao接口,并注入到spring容器
实体类:UserEntity.java
表单类:UserForm.java与实体类对应
接口类:UserDao.java
映射文件UserMapper.xml:执行sql的语句实现Dao类
Service类:UserService.java
MyBatis两种实现方式,
基于XML(userMapper.xml):String statement = "me.gacl.mapping.userMapper.deleteUser";
基于注解(UserMapperI.java): UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
typeAliasesPackage是对扫描的包使用别名:为com.yjy.bsms.entity包下的所有实体类配置别名,MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名
比如com.yjy.bsms.entity.UserEntity这个实体类的别名就会被设置成UserEntity
<property name="typeAliasesPackage" value="com.yjy.bsms.entity" />
Mybatis解决实体类中的属性名和表中的字段名不一致
解决办法一:
通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。解决办法二:
通过来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的
MyBatis多表查询
MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型
<resultMap type="me.gacl.domain.Classes" id="ClassResultMap3">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="me.gacl.domain.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<!-- ofType指定students集合中的对象类型 -->
<collection property="students" ofType="me.gacl.domain.Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
</collection>
</resultMap>