项⽬中mapper的⼿写流程,实现简单的insert(含id⾃增)和select功能
在此之前,我对mapper没有什么了解,在我实现了插⼊和查功能后,我对mapper的流程和作⽤有了⼀定的认识。
1、mapper的认识
我⽬前觉得mapper可以将原本数据库的sql语句转换成java的相应⽅法,通过调⽤java项⽬中的相关⽅法就能实现对数据库数据的“增删改查”和更复杂的操作。
2、mapper的书写流程
我们必须知道mapper是由实体类、Mapper.java接⼝、l三部分组成,以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);
};
l
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 "-////DTD Mapper 3.0//EN" "/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 "-////DTD Mapper 3.0//EN" "/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>
java xml是什么然后是查询部分,我这⾥实现了通过对时间进⾏排序,查询最新的数据。
<insert id="insertFusionMessage"
parameterType="com.ity.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⽂件中需要填的信息有填差的,数据库表中的字段的有的没有设置好。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论