IDEA+Mybatis(三)映射文件_增删查改

一、mapper文件注意事项

1、namespace

namespace中的包名要和DAO/mapper接口的包名一致

<mapper namespace="DAO.UserDao">
public interface UserDao {  
    List<user> selectUser();
}                           

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLnjKA1k-1612701194599)(C:\Users\94528\AppData\Roaming\Typora\typora-user-images\1612276864355.png)]

2、增删查改标签中的属性

  • id:就是namespace中对应的接口中的方法名;

  • resultType:SQL语句执行的返回值;

  • parameterType:参数类型(即接口方法输入参数的类型);

     user selectUser(String name);
    
     <select id="selectUser" resultType="entity.user" parameterType="String">
            select * from user where username = #{name}
        </select>
    

二、select

选择,查询语句

  1. 编写接口

     user selectUser(String name);
    
  2. 编写接口对应的mapper中的SQL语句

     <select id="selectUser" resultType="entity.user" parameterType="String">
            select * from user where username = #{name}
        </select>
    
  3. 测试

     @Test
        public void testSelectUser(){
            SqlSession sqlSession= MybatisUtils.sqlSession();
            try {
                UserDao DAO=sqlSession.getMapper(UserDao.class);
               user user = DAO.selectUser("user1");
               System.out.println(user);
    
            } finally {
                sqlSession.close();
            }
        }
    
  4. 注解方式:

    直接在接口方法处写注解sql,无需写mapper,适用简单的sql

    无参:

    public interface UserDao {
        @Select("select * from user")
        List<User> UserList();
    }
    

    有参(方法存在多个参数,每个参数前必须加上@Param(“parameter”)注解):

    public interface UserDao {
        //方法存在多个参数,每个参数前必须加上@Param("username")注解
        @Select("select * from user where username= #{username}")
        List<User> userListByUsername(@Param("username") String username);
    }
    

三、insert

插入语句

  1. 编写接口

    int insertUser(User user);
    
  2. 编写接口对应的mapper中的SQL语句

     <insert id="insertUser"  parameterType="entity.User">
            insert into user values (#{username},#{pwd},#{email})
        </insert>
    
  3. 测试

     //增删改需要提交事务
        @Test
        public void testInsertUser(){
            SqlSession sqlSession= MybatisUtils.sqlSession();
            try {
                UserDao DAO=sqlSession.getMapper(UserDao.class);
    
                User user = new User("user4","123456", "fasfaf@qq.com");
                int res=DAO.insertUser(user);
                if(res>0){
                    System.out.println("插入成功"+res);
                }
                sqlSession.commit();//增删改需要提交事务
    
            } finally {
                sqlSession.close();
            }
        }
    

    **注意:**增删改需要提交事务!!

  4. 注解方式:

    类似select的注解方式:

    public interface UserDao {
        @Insert("insert into user values (#{name},#{passsword},#{Email})")
        int insertUser(User user);
    }
    

    **注意:**可以设置自动提交事务!!

四、update

更新语句

  1. 编写接口

    int updateUser(User user);
    
  2. 编写接口对应的mapper中的SQL语句

     <update id="updateUser" parameterType="entity.User">
            update user
            set pwd = #{pwd}
            where username=#{username};
        </update>
    
  3. 测试

     //增删改需要提交事务
        @Test
        public void testUpdateUser(){
            SqlSession sqlSession= MybatisUtils.sqlSession();
            try {
                UserDao DAO=sqlSession.getMapper(UserDao.class);
    
                User user = new User("user2","1234", "fasfaf@qq.com");
                int res=DAO.updateUser(user);
                if(res>0){
                    System.out.println("更新成功"+res);
                }
                sqlSession.commit();//增删改需要提交事务
    
            } finally {
                sqlSession.close();
            }
        }
    

    **注意:**增删改需要提交事务!!

  4. 注解方式:

    类似select的注解方式:

    public interface UserDao {
        @Update("update user set pwd = #{pwd} where username=#{username};")
       int updateUser(User user);
    }
    

    **注意:**可以设置自动提交事务!!

五、delete

删除语句

  1. 编写接口

     int deleteUser(User user);
    
  2. 编写接口对应的mapper中的SQL语句

     <delete id="deleteUser" parameterType="entity.User">
            delete from user where username =#{username}
        </delete>
    
  3. 测试

     //增删改需要提交事务
        @Test
        public void testdeleteUser(){
            SqlSession sqlSession= MybatisUtils.sqlSession();
            try {
                UserDao DAO=sqlSession.getMapper(UserDao.class);
    
                User user = new User("user4","", "");
                int res=DAO.deleteUser(user);
                if(res>0){
                    System.out.println("删除成功"+res);
                }
                sqlSession.commit();//增删改需要提交事务
    
            } finally {
                sqlSession.close();
            }
        }
    

    **注意:**增删改需要提交事务!!

  4. 注解方式:

    类似select的注解方式:

    public interface UserDao {
        @Update(" delete from user where username =#{username}")
       int deleteUser(@Param("username") String username);
    }
    

    **注意:**可以设置自动提交事务!!

六、注意事项

1、接口方法对应的mapper中的标签不要写错

如:selectuser() 对应mapper中的标签、insertuser() 对应mapper中的标签

2、resource绑定mapper需要使用路径

<mapper resource="com/resource/UserDao.xml"/>

而不是:

<mapper resource="com.resource.UserDao.xml"/>

3、程序配置文件必须符合规范

4、maven资源没有导出问题

参考这篇:maven配置注意事项

5、关于@Param() 注解

  • 基本类型的参数或者String类型的参数需要加上
  • 引用类型的参数不用加
  • 如果只有一个基本类型,可以忽略,建议加上
  • 在Sql中引用的就是在@Param()中设定的属性名

七、小技巧

1、map

使用map传递参数,可以跳出实体类和方法传参的一些限制,不必必须一一对应实体类中的每个属性,可自行定制所需传递的参数

使用方法对比:

dao接口:

int insertUser(User user);	//不使用map
int addUser(Map<String,Object> map);	//使用map

mapper:

<!--不使用map-->
<insert id="insertUser"  parameterType="entity.User">
        insert into user values (#{username},#{pwd},#{email})
    </insert>
 <!--使用map-->
<insert id="addUser"  parameterType="Map">
        insert into user values (#{name},#{passsword},#{Email})
    </insert>

调用:

//不使用map
    public void testInsertUser(){
        SqlSession sqlSession= MybatisUtils.sqlSession();
        try {
            UserDao DAO=sqlSession.getMapper(UserDao.class);

            User user = new User("user4","123456", "fasfaf@qq.com");
            int res=DAO.insertUser(user);
            if(res>0){
                System.out.println("插入成功"+res);
            }
            sqlSession.commit();//增删改需要提交事务

        } finally {
            sqlSession.close();
        }
    }

//使用map
    public void testAddtUser(){
        SqlSession sqlSession= MybatisUtils.sqlSession();
        try {
            UserDao DAO=sqlSession.getMapper(UserDao.class);
            //map处的字段不一定要与实体类和数据库相对应
            Map<String,Object> map =new HashMap<String,Object>();
            map.put("name","user5");
            map.put("passsword","123");
            map.put("Email","asfafas@qq.com");
            int res=DAO.addUser(map);
            if(res>0){
                System.out.println("插入成功"+res);
            }
            sqlSession.commit();//增删改需要提交事务

        } finally {
            sqlSession.close();
        }
    }

对比:

map传递参数,直接在sql中去出key即可

对象传递参数,直接在sqi中取对象属性即可

小结

1、使用mapper可以在一个方法内同时使用多个实体类的属性向数据库查询,方便多表联合查询等操作;

2、多个参数用Map,或者注解

2、模糊查询

(1)java代码执行的时候,传递通配符% %

 List<User> stu = DAO.getUserLike("%李%");

(2)在sql拼接中使用通配符% %

 <select id="getUserLike" resultType="entity.User">
        select * from user where username like "%"#{value}"%"
    </select>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值