zoukankan      html  css  js  c++  java
  • mybatis crud 学习总结02

    1、db.properties

    原因:数据库的连接直接写到配置(mybati-config.xml)里存在安全隐患

    解决:将配置的信息放到一个文件中管理

    右键resources --> File --> 填“db.properties”

    db.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
    username=root
    password=123
    

    到配置中进行引入(properties标签)和使用(${}

    mybati-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE configuration
                    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration> <!-- 配置标签 -->
        <!-- 导入db.properties文件 , 使用 ${} 引入-->
        <properties resource="db.properties"/>
    
    <environments default="development"> <!-- 总环境  默认:development -->
        <environment id="development"> <!-- 环境 名为:development -->
            <transactionManager type="JDBC"/> <!-- 事务管理器  类型:JDBC (事务:确保操作完整性,要么成功要么失败)-->
            <dataSource type="POOLED"> <!-- 数据源 类型:POOLED-->
                <property name="driver" value="${driver}"/> <!--属性 名:驱动 值:..mysql(使用的何种数据库).. -->
                <!-- 属性 名:url 值:数据连接地址+规则(如:字符集:UTF-8) -->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/> <!-- 属性 名:数据库用户名  值:root-->
                <property name="password" value="${password}"/> <!--属性 名:密码  值:123 -->
            </dataSource>
        </environment>
    </environments>
    <mappers> <!--映射器 -->
        <mapper resource="com/dao/userMapper.xml"/> <!-- 映射  资源:userMapper.xml -->
    </mappers>
    </configuration>
    

    2、别名(typeAliases)

    原因:为了减少代码的冗余

    例如:在userMapping中会常常用到:com.pojo.User,可以进行别名设置。

    解决:设置别名,用别名代替全名,减少代码冗余


    mybatis-config.xml -->configuration(代码最好放到该标签下的第一位)

        <!--配置别名,注意顺序:最好能放到configuration标签下的第一位。-->
        <typeAliases>
            <typeAlias type="com.pojo.User" alias="User"/> <!--设置com.pojo.User 别名为:User-->
        </typeAliases>
    

    指定包进行别名设置(一般都是使用这个方法)

    mybatis-config.xml -->configuration(代码最好放到该标签下的第一位)

    <typeAliases>
        <package name="com.pojo"/> <!--在该包下所有文件设别名为:文件名-->
    </typeAliases>
    

    验证效果:

    com/dao/userMapper.xml 为设别名前(com.pojo.User)的代码

    <select id="selectUser" resultType="com.pojo.User">
    

    设置了别名后(使用别名:User)的代码,减少了代码冗余

    <select id="selectUser" resultType="User">
    

    3、mybatis.config.xml中settings标签

    使用settings标签实现

    • 懒加载
    • 日志实现
    • 缓存开启关闭

    默认的settings如下,通过修改里面的设置(setting)实现相应的功能。

    mybatis-config.xml

    <settings>
         <setting name="cacheEnabled" value="true"/>
         <setting name="lazyLoadingEnabled" value="true"/>
         <setting name="multipleResultSetsEnabled" value="true"/>
         <setting name="useColumnLabel" value="true"/>
         <setting name="useGeneratedKeys" value="false"/>
         <setting name="autoMappingBehavior" value="PARTIAL"/>
         <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
         <setting name="defaultExecutorType" value="SIMPLE"/>
         <setting name="defaultStatementTimeout" value="25"/>
         <setting name="defaultFetchSize" value="100"/>
         <setting name="safeRowBoundsEnabled" value="false"/>
         <setting name="mapUnderscoreToCamelCase" value="false"/>
         <setting name="localCacheScope" value="SESSION"/>
         <setting name="jdbcTypeForNull" value="OTHER"/>
         <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    </settings>
    

    问题:如果在 configuration标签 上出现红色波浪线

    鼠标移到该标签出现:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".


    解决:因为位置错误,settings标签要放在properties标签后面。


    4、查询示例

    1、示范:查询功能

    1、设置接口

    userMapper (接口)

    package com.dao;
    
    import com.pojo.User;
    
    import java.util.List;
    
    public interface userMapper {
        //查询全部用户
        List<User> selectUser();
        //根据id查询用户
        User selectUserById(int id);
    }
    

    2、在userMapper.xml设置SQL语句

    userMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.dao.userMapper"> <!-- 映射器  命名空间:映射到那个类的地址  -->
        <select id="selectUser" resultType="User"> <!-- 查询  名:selectUser  结果类型:com.pojo.User -->
        	select * from user
        </select>
        
        <select id="selectUserById" resultType="User">
        	select * from user where id = #{id}
        </select>
    </mapper>
    

    3、测试

    MyTest.java

    import com.dao.userMapper;
    import com.pojo.User;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    import utils.MybatisUtils;
    
    import java.util.List;
    
    public class MyTest {
        @Test
        public void selectUser() {
            SqlSession session = MybatisUtils.getSession();
            userMapper mapper = session.getMapper(userMapper.class);
    
            User user = mapper.selectUserById(1);
            System.out.println("通过Id查询:"+user);
    
            System.out.println("查询所有:");
            List<User> userAll = mapper.selectUser();
            for (User user1 : userAll) {
                System.out.println(user1);
            }
    
            session.close();
        }
    }
    

    5、crud实例

    com/dao/userMapper (接口)

    package com.dao;
    
    import com.pojo.User;
    
    import java.util.List;
    
    public interface userMapper {
        //查询全部用户
        List<User> selectUser();
        //根据id查询用户
        User selectUserById(int id);
        //添加一个用户
        int addUser(User user);
        //修改一个用户
        int updateUser(User user);
        //根据id删除用户
        int deleteUser(int id);
    }
    

    userMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.dao.userMapper"> <!-- 映射器  命名空间:映射到那个类的地址  -->
        <select id="selectUser" resultType="User"> <!-- 查询  名:selectUser  结果类型:com.pojo.User -->
            select * from user
        </select>
    
        <select id="selectUserById" resultType="User">
            select * from user where id = #{id}
        </select>
    
        <insert id="addUser" parameterType="User">
            insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
        </insert>
    
        <update id="updateUser" parameterType="User">
            update user set name=#{name},pwd=#{pwd} where id = #{id}
        </update>
    
        <delete id="deleteUser" parameterType="int">
            delete from user where id = #{id}
        </delete>
    </mapper>
    

    MyTest.java

    import com.dao.userMapper;
    import com.pojo.User;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    import utils.MybatisUtils;
    
    public class MyTest {
        @Test
        public void selectUser() {
            SqlSession session = MybatisUtils.getSession();
            userMapper mapper = session.getMapper(userMapper.class);
    
            /*通过id查询*/
    /*        User user = mapper.selectUserById(1);
            System.out.println("通过Id查询:"+user);*/
    
            /*查询所有用户*/
    /*        System.out.println("查询所有:");
            List<User> userAll = mapper.selectUser();
            for (User user1 : userAll) {
                System.out.println(user1);
            }*/
    
           /*增加用户*/
    /*        User user = new User(6,"赵六","chaoliu"); // 到实体类User中设置:有参构造
            int i = mapper.addUser(user);
            System.out.println(i); // 输出为1,时表示增加一个用户成功
            session.commit(); // 提交事务,没有的话交不到数据库*/
    
            /*根据删除*/
    /*        int i = mapper.deleteUser(6);
            System.out.println(i); // 输出为1,表示删除一个用户成功
            session.commit(); //提交事务,重点!不写的话不会提交到数据库*/
    
            /*修改*/
            User user = mapper.selectUserById(1);
            user.setPwd("newPassword");
            int i = mapper.updateUser(user);
            System.out.println(i);
            session.commit(); //提交事务,重点!不写的话不会提交到数据库
    
            session.close();
        }
    }
    
  • 相关阅读:
    IDEA中Maven依赖下载失败解决方案
    Java 泛型 泛型的约束与局限性
    年轻就该多尝试,教你20小时Get一项新技能
    Java入门
    2020全球C++及系统软件技术大会成功落下帷幕
    hashMap底层源码浅析
    hashMap底层源码浅析
    RabbitMQ (二) 简单队列
    RabbitMQ (一) 简介和基本概念
    Linux 关闭/开启密码登录(仅证书登录)
  • 原文地址:https://www.cnblogs.com/zhouyongyin/p/13455073.html
Copyright © 2011-2022 走看看