logo头像

一路过来,不过游牧自己。。

SSM之MyBatis(二)


下面讲讲如何通过MyBatis来进行一个增删改查的操作!CRUD!

首先,我们得想这些文件都会放到哪,当然是放到userMapper.xml中了。

1、定义sql映射的xml文件

首先看这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<insert id="insertUser" parameterType="com.ibatis.bean.User">
insert into users(name, age) values(#{name}, #{age});
</insert>

<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>

<update id="updateUser" parameterType="com.ibatis.bean.User">
update users set name=#{name},age=#{age} where id=#{id}
</update>

<select id="selectUser" parameterType="int" resultType="com.ibatis.bean.User">
select * from users where id=#{id}
</select>
<select id="selectAllUsers" resultType="com.ibatis.bean.User">
select * from users
</select>

其中User这个是一个类,定义了name,age和其get,set方法!
首先我们看insert,这里插入的不是单个元素,这里插入的是一个User对象,这时候,我们可以看到下面给的是name,age赋值,这个就是直接对应对象中的元素了!
接着我们看delete,这里要求的是按照id号去删除我们的对象,所以需要传入的是一个id,id类型是int型,标签关键字是parameterType,我们传进来的都是这样一个参数!
看看select,这里我们发现,如果是要按照id去查询,就要设置parameterType为一个int值,这时候返回的是什么呢?我们把这个关键字设为resultType,是一个
User对象,这时候我们发现这个是一个结果集,是一个对象来接受!
这个文件写完之后该干嘛呢?

2、在config.xml文件中注册这个userMapper.xml

1
<mapper resource=" com/ibatis/bean/userMapper.xml"/>

3、在dao中去调用

1
2
3
4
5
public User getUserById(int id) {
SqlSession session = sessionFactory.openSession();
User user = session.selectOne(URI+".selectUser", id);
return user;
}

在test中,我们只要传一个id过来,就可以得到一个User对象!

4、使用注解去实现

这是一种比较能够简单去理解的一种方式,而且很好写:
首先我们去定义一个sql映射的接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface UserMapper {
@Insert("insert into users(name, age) values(#{name}, #{age})")
public int insertUser(User user);

@Delete("delete from users where id=#{id}")
public int deleteUserById(int id);

@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int updateUser(User user);

@Select("select * from users where id=#{id}")
public User getUserById(int id);

@Select("select * from users")
public List<User> getAllUser();
}

我们可以看到,只要调用者里的某一个函数,就相当于映射到相应的Sql语句上去了,需要什么参数传什么参数,需要用什么接受就用什么接收,当然,我们不要忘了去注册!

1
<mapper class="com.ibatis.crud.ano.UserMapper"/>

这里就是将接口和配置mapper一起结合起来了!
最后我们再在dao类中去调用!

1
2
3
4
5
6
public User getUserById(int id) {
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(id);
return user;
}

5、几个可以优化的地方

(1)连接数据库的配置单独放在一个properties文件中
1
2
3
4
5
## db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=root

分离,这样以后修改都是非常方便的,注意这里写的方式是没有等号的,甚至说这种形式没有格式!

(2)为实体类定义别名,简化sql映射xml文件中的引用

有时候,我们会发现有很多类前面有一大串包名,如果每次去敲岂不累死,就算复制也感觉麻烦到晕厥,所以,我们采取一种取别名的方式去,去简化我们的取名方式:

1
2
3
<typeAliases>
<typeAlias type="com.ibatis.bean.User" alias="_User"/>
</typeAliases>

两个元素,一个type,一个alias,type是原名,alias是别名!
这样我们后面就可以用—User去代替我们的一大串的名字!

(3)在src下加入log4j的配置文件,打印日志信息

首先,我们得添加jar:

1
log4j-1.2.16.jar

添加日志功能有两种方式:
方式一:log4j.properties

1
2
3
4
5
6
7
8
9
10
11
log4j.properties,
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

方式二:log4j.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="debug" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

这时候我们就可以在控制台看到打印的日志信息,对调程序有很大的帮助!

多走路,多思考,越努力,越幸运!
———————————————YoungerFary

微信打赏

赞赏是不耍流氓的鼓励