增删改查

使用注解的方式开发

使用注解开发比使用xml开发更加方便,我们不需要在额外建立一个dao接口的xml文件,只需要在完成如下两步简单的操作

  1. 在dao接口的方法中添加注解
  2. 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默认为手动提交事务,执行SqlSessioncommmit方法后即可更新。
如下:

 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&amp;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文件,我们可以直接使用注解的方式来简化。

Last modification:March 22, 2020
If you think my article is useful to you, please feel free to appreciate