ssm框架使用mapper步骤:
1.与实体类进行关联转换
2.定义实体类的mapper接口(继承Mapper< T >)
3.调用上一步的mapper接口进行crud
步骤1
实体类与数据库表进行关联如:
@Table(name = "tb_item")
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String sellPoint;
private Long price;
private Integer num;
private String barcode;
private String image;
private Long cid;
private Integer status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSellPoint() {
return sellPoint;
}
public void setSellPoint(String sellPoint) {
this.sellPoint = sellPoint;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Long getCid() {
return cid;
}
public void setCid(Long cid) {
this.cid = cid;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
注意:
1.到item实体类上有一个@Table(name = “tb_item”)的注解,这个是JPA的注解,此标记需要标注在类名前,不能标注在方法或属性前, name属性表示实体所对应表的名称,默认表名为实体的名称且不区分大小写。
2.id主键字段上有一个@id注解和
@GeneratedValue(strategy = GenerationType.IDENTITY),前者表示该属性对应表的主键字段,后者注解为一个实体生成一个唯一标主键的生成策略,此种主键生成策略就是通常所说的主键自增长,数据库在插入数据时,会自动给主键赋值,比如MYSQL可以在创建表时声明"auto_increment" 来指定主键自增长。
其他的字段上面并没有注解原因是:1.表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如UserInfo默认对应的表名为user_info。
事实上实体类与表的关联有如下原则:
- 表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如UserInfo默认对应的表名为user_info。
- 表名可以使用@Table(name = “tableName”)进行指定,对于不符合上面原则的表可以采用这种形式。
- 表字段默认为Java对象的Field名字驼峰转下划线形式.可以使用@Column(name = “fieldName”)来指定不符合驼峰转下划线的字段。
- 使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用。
- 建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键,并使用id自增长@GeneratedValue(strategy = GenerationType.IDENTITY)。
步骤2
定义实体类的mapper接口(继承Mapper< T >)
如:
public interface ItemMapper extends Mapper<Item> {
//除了通用mapper之外的方法需要自己写
}
通用mapper提供的方法:
一旦继承了Mapper<T>,继承的Mapper就拥有了以下通用的方法:
//根据实体类不为null的字段进行查询,条件全部使用=号and条件
List<T> select(T record);
//根据实体类不为null的字段查询总数,条件全部使用=号and条件
int selectCount(T record);
//根据主键进行查询,必须保证结果唯一
//单个字段做主键时,可以直接写主键的值
//联合主键时,key可以是实体类,也可以是Map
T selectByPrimaryKey(Object key);
//插入一条数据
//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)
//优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长
int insert(T record);
//插入一条数据,只插入不为null的字段,不会影响有默认值的字段
//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)
//优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长
int insertSelective(T record);
//根据实体类中字段不为null的条件进行删除,条件全部使用=号and条件
int delete(T key);
//通过主键进行删除,这里最多只会删除一条数据
//单个字段做主键时,可以直接写主键的值
//联合主键时,key可以是实体类,也可以是Map
int deleteByPrimaryKey(Object key);
//根据主键进行更新,这里最多只会更新一条数据
//参数为实体类
int updateByPrimaryKey(T record);
//根据主键进行更新
//只会更新不是null的数据
int updateByPrimaryKeySelective(T record);
//根据Exmaple条件查询总数
int selectCountByExample(Object example);
//根据Exmaple条件删除
int deleteByExample(Object example);
//根据Exmaple条件查询
List<T> selectByExample(Object example);
//根据Exmaple条件更新非空(null)字段
int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
//根据Exmaple条件更新全部字段
int updateByExample(@Param("record") T record, @Param("example") Object example);
步骤3
调mapper接口进行crud操作
在此之前需要在需要说明:在spring4以后支持泛型注入。
在spring中扫描mapper接口包:
<!--扫描mapper的接口包 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--包所在位置 -->
<property name="basePackage" value="com.xxx.mapper"/>
</bean>
service中注入实现泛型注入mapper接口:
普通的注入如下:
@Autowired
private ItemMapper itemMapper;
泛型注入如下:
@Autowired
private Mapper<Item> mapper;
只需要执行mapper泛型,spring就会自动取mapper接口包下找到ItemMapper接口。
最后便可调用步骤2中的mapper方法进行数据库操作了。