mybatisCRUD操作

11 篇文章 0 订阅

mybatis02

mybatisCRUD操作

注解书写方式

/**
     * 查询所有用户
     * @return
     */
    @Select("select * from user")
    List<User> findAll();

    /**
     * 添加用户
     * @return
     */
    @Insert("insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})")
    void saveUser(User user);

    /**
     * 修改用户
     * @return
     */
    @Update("update user set username = #{username} where id = #{id}")
    void updateUser(User user);

    /**
     * 删除用户
     * @return
     */
    @Delete("delete from user where id = #{id}")
    void deleteUser(Integer id);

    /**
     * 根据id查找用户
     * @return
     */
    @Select("select * from user where id = #{id}")
    User findById(Integer id);

    /**
     * 模糊查询
     * @return
     */
    //@Select("select * from user where username like '%${value}%'")另一张写法,value为固定写法
    @Select("select * from user where username like #{username}")
    List<User> findByName(String username);

    /**
     * 总记录数
     * @return
     */
    @Select("select count(*) from user")
    int finTotal();

测试类

private InputStream in;
    private SqlSession session;
    private UserDao userDao;
    @Before
    public void init() throws IOException {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig");
        //2.SqlSessionFactory
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SQLSession对象
        session = factory.openSession();
        //创建dao接口的代理对象
        userDao = session.getMapper(UserDao.class);
    }

    @After
    public void destory() throws IOException {
        //事务提交
        session.commit();
        //释放资源
        session.close();
        in.close();
    }
    @Test
    public void testFindAll(){
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }
    @Test
    public void testSave(){
        User user =new User();
        user.setUsername("cccc");
        user.setSex("男");
        user.setBirthday(new Date());
        user.setAddress("中国");
        userDao.saveUser(user);
    }

    @Test
    public void testUpdate(){
        User user =new User();
        user.setId(61);
        user.setUsername("cccc");
        userDao.updateUser(user);
    }
    @Test
    public void testDelete(){
        userDao.deleteUser(62);
    }

    @Test
    public void testFindById(){
        User user = userDao.findById(46);
        System.out.println(user);
    }

    @Test
    public void testFindByName(){
        List<User> users = userDao.findByName("%cc%");
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void testTotal(){
        int total = userDao.finTotal();
        System.out.println(total);
    }

xml书写方式

    <!-- 查询所有 -->
    <select id="findAll" resultMap="userMap">
        <!--select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;-->
        select * from user;
    </select>

    <!-- 保存用户 -->
    <insert id="saveUser" parameterType="user">
        <!-- 配置插入操作后,获取插入数据的id -->
        <selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday});
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="USER">
        update user set username=#{userName},address=#{userAddress},sex=#{userAex},birthday=#{userBirthday} where id=#{userId}
    </update>

    <!-- 删除用户-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{uid}
    </delete>
    
    <!-- 根据id查询用户 -->
    <select id="findById" parameterType="INT" resultMap="userMap">
        select * from user where id = #{uid}
    </select>

    <!-- 根据名称模糊查询 -->
    <select id="findByName" parameterType="string" resultMap="userMap">
          select * from user where username like #{name}
        <!-- select * from user where username like '%${value}%'-->
   </select>

    <!-- 获取用户的总记录条数 -->
    <select id="findTotal" resultType="int">
        select count(id) from user;
    </select>

查询条件对象

OGNL表达式:
Object Graphic Navigation Language
对象 图 导航 语言

它是通过对象的取值方法来获取数据。在写法上把get给省略了。
比如:我们获取用户的名称
类中的写法:user.getUsername();
OGNL表达式写法:user.username
mybatis中为什么能直接写username,而不用user.呢:
因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名

user代表QueryVo中的user对象

@Getter
@Setter
public class QueryVo {
    private User user;
}

 @Select("select * from user where username like #{user.username}")
    List<User> findUserByVo(QueryVo vo);

<!-- 根据queryVo的条件查询用户 -->
    <select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultMap="userMap">
        select * from user where username like #{user.username}
    </select>
    
QueryVo vo = new QueryVo();
        User user =new User();
        user.setUsername("%王%");
        vo.setUser(user);
        List<User> users = userDao.findUserByVo(vo);
        for (User user1 : users) {
            System.out.println(user1);
        }

实体类名与数据库名不一致

 dao.xml配置
 <!-- 配置 查询结果的列名和实体类的属性名的对应关系 -->
    <resultMap id="userMap" type="uSeR">
        <!-- 主键字段的对应 -->
        <id property="userId" column="id"></id>
        <!--非主键字段的对应-->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>
sqlmapconfig.xml配置
<!--    使用typealiases配置别名,只能配置domain包中的别名-->
    <typeAliases>
<!--        type实体类,  alias别名,在UserDao.xml中可以使用别名
        <typeAlias type="com.cc.domain.User" alias="user"></typeAlias>-->
<!--        要配置别名的包,包下的所有类都会生产别名,类名就是别名,不区分大小写-->
        <package name="com.cc.domain"/>
    </typeAliases>

其他优化

使用properties引用数据库外部配置文件

<!--    引用外部配置文件
        resource  指定配置文件位置,按照类路径的写法来写,必须保存类路径下
        url    按照url方式来写    协议+主机+端口+URI
        url="file:///E:/idea/mybatis/mybatisDao/src/main/resources/jdbcConfig.properties"
-->
    <properties resource="jdbcConfig.properties">
    </properties>
    
    <property name="driver" value="${driver}"></property>
    <property name="url" value="${url}"></property>
    <property name="username" value="${username}"></property>
    <property name="password" value="${password}"></property>

遇到的问题

mybatis插入数据库数据乱码
在这里插入图片描述
解决方式,修改链接

jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值