l <select >
l <insert>
l <update>
l <delete>
l <resultMap>
l <parameterMap>
4.1<select>/<insert>/<update>/<delete>
Ø 不同的标签写不同的SQL语句
<!-- 查询一条数据 --> <select id="getAll" resultType="entity.User"> select * from goods </select> <!-- 删除一条数据 --> <delete id="delAll" parameterType="java.lang.Integer"> delete from goods where id=#{id} </delete> <!-- 插入一条数据 --> <insert id="insertAll" parameterType="entity.User"> insert into goods(id,name,price) value(#{id},#{name},#{price}) </insert> <!-- 更新一条数据 --> <update id="upAll" parameterType="entity.User"> update goods set name=#{name},price=#{price} where id=#{id} </update> |
u 属性解释:
Ø Id: 每条SQL语句的唯一标识符,Java代码通过索引特定的id ,从而找到与之对应的那条SQL语句
Ø parameterType:传入参数。如果查询一条数据中,传入的是主键id,它的参数类型是int,而在插入一条数据中,传入的参数是一个User对象,这里应该写User类的完整路径(entity.User)包名+类名。
Ø resultType:在查询语句中,会有个返回值,同parameterType一样,这里标识的是返回值的参数类型。
Ø resultMap:查询语句返回的结果类型,此类型需要和映射文件中的<resultMap>标签配合使用
Ø parameterMap:为查询语句传入参数类型,此类型需要配合映射文件中的<parameterMap>标签使用
4.2<resultMap><parameterMap>标签
当实体类中的属性和数据库中的字段对应是,我们使用resultType和parameterType就可以完成CRUD(数据库基本操作中的Create(创建)、ReadRetrieve(读取)、Update(更新)、Delete(删除));
当实体类中的属性和数据库中的字段不对应时,就要用resultMap和parameterMap了
4.2.1了解JDBC从sql查询结果到模型实体
我们需要了解从sql 查询结果集到JavaBean 或者POJO实体对象
Ø 通过JDBC查询得到resultSet对象
Ø 遍历resultSet 对象,并将每行数据暂存到HashMap实例中,以结果集的字段名或字段名为键,以字段的值为值
Ø 根据resultMap 的type 属性通过反射实例化领域模型。
Ø 根据resultMap 标签的type 属性 和id ,result 等标签,将HashMap 中的键值对,填充到领域模型实例中并返回
4.2.2 resultMap 标签
l 属性说明:
Ø Id:resultMap标签的唯一标识
Ø Type:返回值的类名,或者别名
l 作用:
Ø 建立SQL查询结果字段与实体属性的映射关系信息
1. 建立领域模型 |
package entity; publicclass User { privateintid; private String name; publicint getId() { returnid; } publicvoid setId(int id) { this.id = id; } public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getPrice() { returnprice; } } |
2. Mapping.xml代码 |
<select id="getMap" resultMap="getUserMap"> select * from goods </select> |
<resultMap type="entity.User" id="getUserMap"> <id column="id" property="ids"/> <result column="name" property="names"/> </resultMap> |
l 子标签说明:
Ø Id:用于设置主键字段与模型属性映射关系
Ø Result:用户设置普通字段与模型属性映射关系
Ø 元素说明:
² Column:数据库列名,如果不和数据库对应,会查询不出数据
² Property:映射到实体对象的属性
3. 测试代码 |
@Test publicvoid test05(){ //打开会话 SqlSession session = sFactory.openSession(); //和对象映射文件的命名空间相同,加上要执行的语句的id String sql="UserMappings.getMap"; List<User> list = session.selectList(sql); for(User user:list){ System.out.println(user.getName()+" "+user.getId()); } session.close(); } |
结果: |
长 1 c++ 2 |
Mapping.xml代码 |
<!-- 保存一个goods--> <insert id="saveGoods" parameterMap="goodsParameterMap"> insert into goods (ID,NAME) values (#{ids},#{names}) </insert> |
<!-- resultMap:resultMap的id ,bookName:resultMap的property,即实体类中的属性 --> <parameterMap type="Book.dao.Book" id="goodsParameterMap"><parameter property="ids" resultMap="getUserMap" /> <parameter property="names" resultMap="getUserMap" /> </parameterMap> |