项目中mapper的手写流程,实现简单的insert(含id自增)和select功能
在此之前,我对mapper没有什么了解,在我实现了插入和查找功能后,我对mapper的流程和作用有了一定的认识。1、mapper的认识我目前觉得mapper可以将原本数据库的sql语句转换成java的相应方法,通过调用java项目中的相关方法就能实现对数据库数据的“增删改查”和更复杂的操作。2、mapper的书写流程我们必须知道mapper是由实体类、Mapper.java接口、Mapper.xm
在此之前,我对mapper没有什么了解,在我实现了插入和查找功能后,我对mapper的流程和作用有了一定的认识。
1、mapper的认识
我目前觉得mapper可以将原本数据库的sql语句转换成java的相应方法,通过调用java项目中的相关方法就能实现对数据库数据的“增删改查”和更复杂的操作。
2、mapper的书写流程
我们必须知道mapper是由实体类、Mapper.java接口、Mapper.xml三部分组成,以user为例,在数据库中,user由id(int)、username(varchar)、password(varchar)、shijian(date)四个字段组成。
2.1实体类
实体类需要写的是,与user数据库字段对应的java类型的属性,以及对应的get()和set()方法(有快速生成的方法)。需要注意的是java属性与数据库字段之间的对应关系,如Integer——int、Double——double、String——varchar、Date——date,Timestamp——timestamp,我目前就用过这些,其他的建议百度。
public class User {
private Integer id;
private String username;
private String password;
private Date shijian;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
....
}
2.2Mapper.java接口
接口类中写的是,转换成java语言实现的对数据库的操作,其实就是起个名,然后在参数地方写好这个方法需要的参数,比如insert方法,插入一个用户就需要在参数出写一个User类型的参数。返回类型也要写清楚,如插入——void、查询——User。具体如何实现的全写在对应的xml文件里。
public interface UserMapper {
void insertallUser(User user);
};
2.3Mapper.xml
xml文件其实就是java项目和数据库连接实现相关操作的桥梁,你需要在其中添上一些信息,这些信息将User实体类、UserMapper、数据库user表连接在一起,互相之间的有了联系就能进行一些列操作了,我写的是比较简单的,xml文件里的内容由三部分组成,前两行可能是固定要写的(没做研究),然后是部分,需要填好与数据库表相对应的实体类、接口类以及数据库的中的字段和实体类中的属性,需要注意的是在填写数据类型的时候,写数据库那边的类型就行(大写),但是“int”在这要写成“INTEGER”,然后有<id></id>
和<result></result>
两种,第一个主键字段填,第二个普通字段填。剩下的部分就用来写,通过sql语句实现接口类中写好的方法,插入就写<insert></inaert>
、查询就写<select></select>
,id填上对应的接口类中方法。sql语句中的#{},就是填实体类中的属性,这里想当一你要插入的数据内容。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="接口类">
<resultMap id="xxxMap" type="实体类">
<id column="数据库字段" jdbcType="数据库字段类型" property="实体类属性" />
<result column="数据库字段" jdbcType="数据库字段类型" property="实体类属性" />
</resultMap>
<insert id="接口类中的方法" useGeneratedKeys="实现id自增" keyProperty="实现id自增" parameterType="实体类">
/*
实现的sql语句
*/
</insert>
<select id="接口类中的方法" parameterType="实体类">
/*
实现的sql语句
*/
</select>
</mapper>
然后在说一下id自增,<insert useGeneratedKeys="true" keyProperty="id">
,在插入部分,写上这两个属性,sql语句里面不用写id了,毕竟是自增。然后还需要在测试时,在数据库表里有很多数据想要清空,重新从1开始看看id自增的效果,要用truncate 表名
进行清空,不然id不会重新从1开始自增。还有就是要自增的字段,通常是主键,要写上这个字段自增。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="p2p.Mapper.UserMapper">
<resultMap id="users"
type="p2p.bean.User">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="username" jdbcType="VARCHAR" property="username" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="shijian" jdbcType="DATE" property="shijian" />
</resultMap>
<insert id="insertallUser" useGeneratedKeys="true" keyProperty="id"
parameterType="p2p.bean.User">
INSERT INTO user
(username,
password,
shijian)
VALUES (
#{username},
#{password},
#{shijian})
</insert>
</mapper>
然后是查询部分,我这里实现了通过对时间进行排序,查询最新的数据。
<insert id="insertFusionMessage"
parameterType="com.qust.gate.entity.FusionMessage">
INSERT INTO fusion_message
(Id,
Time_Horizon,
Uva_Ais,
Uva_Test,
Hsf_Test,
Boat_Test,
File_Name)
VALUES (
#{id},
#{timeHorizon},
#{uvaAis},
#{uvaTest},
#{hsfTest},
#{boatTest},
#{fileName})
</insert>
3、对于需求的分析
其实一开始看的时候我看的时候没有头绪,感觉网上查到的知识点之间没有联系,为什么要分成实体类、接口类、xml文件三部分?在解决问题时没有方向将会使我们解决问题的效率大幅度下降,我是通过“分解问题”、“多动手敲”。“分解问题”,就是我要完成通过java的方法向数据库中插入数据,①用简单的数据库(我这用的user)写好实体类、接口类、xml文件中的内容,实现简单的插入操作②改变数据库、java中的数据类型,与需求的对应,能否继续实现插入操作③应用到需求上,实现具体功能。“多动手敲”,将需求分成每一步,每一步就不会太复杂了,多敲敲。在敲得过程中就会慢慢理解了mapper各部分之间的联系。
4、遇到的错误
让我最深深记住的就是,在项目报错时,不要着急,要一点点研究报错时的提示,不要急着粘贴错误去网上查,提示通常会指出比较精准的原因,拿着这个比较精准的原因到网上查!mapper这部分的错误,通常就是字段与属性对应错了、xml文件的名字是和接口类一模一样的、xml文件中需要填的信息有填差的,数据库表中的字段的有的没有设置好。
更多推荐
所有评论(0)