POJO怎么映射成数据库的表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJO怎么映射成数据库的表?相关的知识,希望对你有一定的参考价值。
参考技术A 用hibernate框架pojo里用hibernate注解 例如:package com.ayumi.pojo;import java.io.Serializable;
import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;
import org.hibernate.validator.NotNull;
@Entity //实体对象@Table(name="users") //表名public class Users implements Serializable private Integer id; private String username; private String password;@Id //主键@Column(name="id") //列名 public Integer getId() return id; public void setId(Integer id) this.id = id; @Column(name="username",length=20) //列名 及 长度设定@NotNull //非空设定 public String getUsername() return username; public void setUsername(String username) this.username = username; @Column(name="password",length=20) //列名 及 长度设定 public String getPassword() return password; public void setPassword(String password) this.password = password;
这样就对表的字段定义好了然后编写main方法测试类public static void main(String[] args) Configuration cfg=new AnnotationConfiguration().configure(); SchemaExport eport=new SchemaExport(cfg); eport.create(true, true);
执行,这样就会在hibernate.cfg.xml里配置好的相应连接中对应的数据库下创建成功数据库表 参考技术B 用传说中的Hibernate框架~
mybatis学习 POJO的映射文件
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
1、parameterType(输入类型)
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。
#实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#表示一个占位符即?。
例如:
<select id="findUserById" parameterType="int" resultType="user"> select * from user where id = #id </select>
使用占位符#可以有效防止sql注入,在使用时不需要关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。#可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,#括号中可以是value或其它名称。
$和#不同,通过$可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, $可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,$括号中只能是value。使用$不能防止sql注入,但是有时用$会非常方便,如下的例子:
<select id="selectUserByName" parameterType="string" resultType="user">
select * from user where username like ‘%$value%‘
</select>
使用#则传入的字符串中必须有%号,而%是人为拼接在参数中,显然有点麻烦,如果采用$在sql中拼接为%的方式则在调用mapper接口传递参数就方便很多。
如果使用$原始符号则必须人为在传参数中加%。
List<User> list = userMapper.selectUserByName("%管理员%");
如果使用%$value%则不用人为在参数中加%。
List<User>list = userMapper.selectUserByName("管理员");
parameterType也可以传递pojo对象。Mybatis使用ognl表达式解析对象字段的值,如下例子:
<!—传递pojo对象综合查询用户信息 -->
<select id="findUserByUser" parameterType="user" resultType="user">
select * from user where id=#id and username like ‘%$username%‘
</select>
上边%$username%中的username就是user对象中对应的属性名称。
parameterType还可以传递pojo包装对象(也就是将多个对象包装为一个对象)。开发中通过pojo传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
例如下面的包装对象:
public class QueryVo private User user; private UserCustom userCustom;
在映射文件中的使用
<!—传递pojo包装对象综合查询用户信息 -->
<select id="findUserByUser" parameterType="queryVo" resultType="user"> select * from user where id=#user.id and username like ‘%$user.username%‘ </select>
可以看出通过使用类似java中对象访问属性的形式来进行参数传递。
parameterType也可以传递hashmap类型的参数
在xml映射文件中使用形式如下:
<select id="findUserByHashmap" parameterType="hashmap" resultType="user"> select * from user where id=#id and username like ‘%$username%‘ </select>
在代码中的调用形式如下:
Public void testFindUserByHashmap()throws Exception //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //构造查询条件Hashmap对象 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id", 1); map.put("username", "管理员"); //传递Hashmap对象查询用户列表 List<User>list = userMapper.findUserByHashmap(map); //关闭session session.close();
这样,可以把参数以key-value的形式传给Mybatis。如果传递的map中的key和xml映射文件的sql语句中解析的key不一致,系统不会报错,但是通过key获取值为空。
2、resultType
使用resultType可以进行输出映射,只有查询出来的列名和pojo中的属性名一致,才可以映射成功。如果查询出来的列名和pojo中的属性名全部不一致,就不会创建pojo对象。但是只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
resultType可以输出简单类型。例如查询用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。
<!-- 获取用户列表总数 -->
<select id="findUserCount" parameterType="user" resultType="int"> select count(*) from user </select>
resultType可以输出pojo对象和pojo列表。当使用动态代理时,输出pojo对象和输出pojo列表在xml映射文件中定义的resultType是一样的,而生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 )。
3、resultMap
mybatis中可以使用resultMap完成高级输出结果映射。如果查询出来的列名和定义的pojo属性名不一致,就可以通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。然后使用resultMap作为statement的输出映射类型。resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。这里先不做具体详述,有兴趣的可以参看Mybatis的官方文档。
以上是关于POJO怎么映射成数据库的表?的主要内容,如果未能解决你的问题,请参考以下文章