增删改查
使用注解的方式开发
使用注解开发比使用xml开发更加方便,我们不需要在额外建立一个dao接口的xml文件,只需要在完成如下两步简单的操作
- 在dao接口的方法中添加注解
- mybatis的配置文件中,更改mapper标签的resource为class,并且指定为dao接口的全限定类名
下为更改部分:
public interface UserDao {
@Select("select * from user")
public List<User> findAll();
}
<mappers>
<mapper class="com.oylong.dao.UserDao"></mapper>
</mappers>
Mybatis运行的分析
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//读取配置文件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//创建工厂 使用了构建者模式 把对象的创建细节隐藏,直接使用方法就可拿到对象
SqlSession session = factory.openSession();
//创建SqlSession 使用了工厂模式 解耦
UserDao userDao = session.getMapper(UserDao.class);
//创建dao接口 使用了代理模式 不修改源代码对已有的方法增强
List<User> userList = userDao.findAll();
System.out.println(userList);
session.close();
in.close();
}
Mybatis的CRUD操作
dao层接口中如下声明
public List<User> findAll(); //查找所有
public void addUser(User user); //增加
public void deleteUserById(int id); //根据id删除
public void updateUser(User user); //更新
映射文件如下
<insert id="addUser" parameterType="com.oylong.domain.User">
insert into user(username, birthday, sex, address) values (#{username}, #{birthday}, #{sex}, #{address})
</insert>
<select id="findAll" resultType="com.oylong.domain.User">
select * from user
</select>
<delete id="deleteUserById" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="com.oylong.domain.User">
update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}
</update>
执行更改操作无效
发现添加,更新,删除操作,在成功执行相应的方法后,数据库中并没有生效,这是因为没有mybatis默认为手动提交事务,执行SqlSession
的commmit
方法后即可更新。
如下:
User user = new User();
user.setAddress("中国");
user.setBirthday(new Date());
user.setSex("男");
user.setUsername("hehehehe");
userDao.addUser(user);
session.commit();
session.close();
执行时中文乱码问题
在执行添加操作后,发现并不能正常添加,出现了中文乱码的情况(全部都是??),百度后,解决方法如下:
- 更改配置文件中的url,在url后面增加一些参数:
<property name="url" value="jdbc:mysql://192.168.3.66:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
之后即不会再乱码
模糊查询的注意事项
在使用mybatis进行模糊查询时,需要注意%的位置,有两种方法可实现
第一种,直接在参数的地方加入%
<select id="findByName" parameterType="string" resultType="com.oylong.domain.User"> select * from user where username like #{name} </select>
List<User> users = userDao.findByName("%王%")
- 第二种,更改sql语句,使用
{$value}
<select id="findByName" parameterType="string" resultType="com.oylong.domain.User">
select * from user where username like '%${value}%'
</select>
List<User> users = userDao.findByName("王")
同样的,增删改查操作可以不用xml文件,我们可以直接使用注解的方式来简化。