原文地址:https://blog.csdn.net/ITITII/article/details/79969447

一、什么是Mybatis

这里借用官网的一句话介绍什么是mybatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、Mybatis相对JDBC有哪些优势

首先我们来看一看jdbc连接数据库的连接方法:

    1. public static void main(String[] args) {
      1. Connection connection = null;
        1. PreparedStatement preparedStatement = null;
          1. ResultSet resultSet = null;
              1. try {
                1. //1、加载数据库驱动
                  1. Class.forName("com.mysql.jdbc.Driver");
                    1. //2、通过驱动管理类获取数据库链接
                      1. connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "root");
                        1. //3、定义sql语句 ?表示占位符
                          1.         String sql = "select * from user where username = ?";
                            1. //4、获取预处理statement
                              1. preparedStatement = connection.prepareStatement(sql);
                                1. //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
                                  1. preparedStatement.setString(1, "王五");
                                    1. //6、向数据库发出sql执行查询,查询出结果集
                                      1. resultSet = preparedStatement.executeQuery();
                                        1. //7、遍历查询结果集
                                          1. while(resultSet.next()){
                                            1. User user
                                              1. System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
                                                1. }
                                                  1. } catch (Exception e) {
                                                    1. e.printStackTrace();
                                                      1. }finally{
                                                        1. //8、释放资源
                                                          1. if(resultSet!=null){
                                                            1. try {
                                                              1. resultSet.close();//释放结果集
                                                                1. } catch (SQLException e) {
                                                                  1. // TODO Auto-generated catch block
                                                                    1. e.printStackTrace();
                                                                      1. }
                                                                        1. }
                                                                          1. if(preparedStatement!=null){
                                                                            1. try {
                                                                              1. preparedStatement.close();
                                                                                1. } catch (SQLException e) {
                                                                                  1. // TODO Auto-generated catch block
                                                                                    1. e.printStackTrace();
                                                                                      1. }
                                                                                        1. }
                                                                                          1. if(connection!=null){
                                                                                            1. try {
                                                                                              1. connection.close();//关闭数据库连接
                                                                                                1. } catch (SQLException e) {
                                                                                                  1. // TODO Auto-generated catch block
                                                                                                    1. e.printStackTrace();
                                                                                                      1. }
                                                                                                        1. }
                                                                                                            1. }
                                                                                                                1. }
                                                                                                              1.  

                                                                                                              通过上面的一段jdbc连接数据代码,我们看有哪些不好的地方:

                                                                                                              1.在创建connection的时候,存在硬编码问题(也就是直接把连接信息写死,不方便后期维护)

                                                                                                              2.preparedStatement对象在执行sql语句的时候存在硬编码问题。

                                                                                                              3.每次在进行一次数据库连接后都会关闭数据库连接,频繁的开启/关闭数据连接影响性能。

                                                                                                              简单的说一下mybatis相对jdbc的优势:

                                                                                                              1.mybatis是把连接数据库的信息都是写在配置文件中,因此不存在硬编码问题,方便后期维护。

                                                                                                              2.mybatis执行的sql语句都是通过配置文件进行配置,不需要写在java代码中。

                                                                                                              3.mybatis的连接池管理、缓存管理等让连接数据库和查询数据效率更高。

                                                                                                              ........

                                                                                                              三、Mybatis框架的原理介绍

                                                                                                              这里就通过一张图来对mybatis框架原理进行介绍吧:

                                                                                                              四、Mybatis全局配置文件

                                                                                                              SqlMapConfig.xml是Mybatis的全局配置文件,它的名称可以是任意,但是一般命名都为(SqlMapConfig)

                                                                                                              4.1.全局配置文件的类容和顺序

                                                                                                              Properties(属性)

                                                                                                              Settings(全局参数设置)

                                                                                                              typeAliases(类型别名)

                                                                                                              typeHandlers(类型处理器)

                                                                                                              objectFactory(对象工厂)

                                                                                                              plugins(插件)

                                                                                                              environments(环境信息集合)

                                                                                                              environment(单个环境信息)

                                                                                                              transactionManager(事物)

                                                                                                              dataSource(数据源)

                                                                                                              mappers(映射器)

                                                                                                              4.2.常见配置详解

                                                                                                              properties标签:

                                                                                                              Mybatis可以通过该标签来读取java配置信息:

                                                                                                              例如在工程中对数据源信息写在db.properties文件中,可以通过properties标签来加载该文件。

                                                                                                              db.properties:

                                                                                                                1. db.driver=com.mysql.jdbc.Driver
                                                                                                                  1. db.url=jdbc:mysql://localhost:3306/mybatis
                                                                                                                    1. db.username=root
                                                                                                                      1. db.password=12345678
                                                                                                                    1.  

                                                                                                                    SqlMapConfig.xml使用properties标签:

                                                                                                                      1. <!-- 通过properties标签,读取java配置文件的内容 -->
                                                                                                                        1. <properties resource="db.properties" />
                                                                                                                            1. <!-- 配置mybatis的环境信息 -->
                                                                                                                              1. <environments default="development">
                                                                                                                                1. <environment id="development">
                                                                                                                                  1. <!-- 配置JDBC事务控制,由mybatis进行管理 -->
                                                                                                                                    1. <transactionManager type="JDBC"></transactionManager>
                                                                                                                                      1. <!-- 配置数据源,采用dbcp连接池 -->
                                                                                                                                        1. <dataSource type="POOLED">
                                                                                                                                          1. <property name="driver" value="${db.driver}"/>
                                                                                                                                            1. <property name="url" value="${db.url}"/>
                                                                                                                                              1. <property name="username" value="${db.username}"/>
                                                                                                                                                1. <property name="password" value="${db.password}"/>
                                                                                                                                                  1. </dataSource>
                                                                                                                                                    1. </environment>
                                                                                                                                                      1. </environments>
                                                                                                                                                    1.  

                                                                                                                                                    注意:

                                                                                                                                                    1、 先加载properties中property标签声明的属性

                                                                                                                                                    因此在property中的name属性的值和value比properties中的resource属性先加载。后加载的db.properties会覆盖于property加载属性和值。

                                                                                                                                                    <properties resource="db.properties">

                                                                                                                                                    <property name="db.username",value="1234"/>

                                                                                                                                                    </properties>

                                                                                                                                                    2、 再加载properties标签引入的java配置文件中的属性

                                                                                                                                                    3、 parameterType的值会和properties的属性值发生冲突。因此,在properties文件里的内容命名最好加上db.代表是跟数据源相关的属性,这样就不容易跟以后的属性发生冲突。

                                                                                                                                                    settings标签:

                                                                                                                                                    该标签时mybatis的全局设置,该设置会影响mybatis的运行。

                                                                                                                                                    一般我们使用使用该标签来开启二级缓存和懒加载。

                                                                                                                                                    以下是几张settings配置项的说明:

                                                                                                                                                    typeAliases标签

                                                                                                                                                    该标签是对po类进行别名设置,这样,在后面使用po类的时候就可以直接通过别名引用,而不需要通过po类的全限定名来引用。这样可以提高我们的开发效率。

                                                                                                                                                    首先介绍下Mybatis的默认提供的别名有:

                                                                                                                                                    别名

                                                                                                                                                    映射的类型

                                                                                                                                                    _byte

                                                                                                                                                    byte

                                                                                                                                                    _long

                                                                                                                                                    long

                                                                                                                                                    _short

                                                                                                                                                    short

                                                                                                                                                    _int

                                                                                                                                                    int

                                                                                                                                                    _integer

                                                                                                                                                    int

                                                                                                                                                    _double

                                                                                                                                                    double

                                                                                                                                                    _float

                                                                                                                                                    float

                                                                                                                                                    _boolean

                                                                                                                                                    boolean

                                                                                                                                                    string

                                                                                                                                                    String

                                                                                                                                                    byte

                                                                                                                                                    Byte

                                                                                                                                                    long

                                                                                                                                                    Long

                                                                                                                                                    short

                                                                                                                                                    Short

                                                                                                                                                    int

                                                                                                                                                    Integer

                                                                                                                                                    integer

                                                                                                                                                    Integer

                                                                                                                                                    double

                                                                                                                                                    Double

                                                                                                                                                    float

                                                                                                                                                    Float

                                                                                                                                                    boolean

                                                                                                                                                    Boolean

                                                                                                                                                    date

                                                                                                                                                    Date

                                                                                                                                                    decimal

                                                                                                                                                    BigDecimal

                                                                                                                                                    bigdecimal

                                                                                                                                                    BigDecimal

                                                                                                                                                    自定义单个别名:这种方式只能定义单个类的别名。

                                                                                                                                                    下面的代码就是把com.lc.mybatis.po.User类定义为user的别名

                                                                                                                                                      1. <typeAliases>
                                                                                                                                                        1. <!-- 设置单个别名 -->
                                                                                                                                                          1. <typeAlias type="com.lc.mybatis.po.User" alias="user"/>
                                                                                                                                                            1. </typeAliases>
                                                                                                                                                          1.  

                                                                                                                                                          自定义之批量定义别名:

                                                                                                                                                          下面代码是把com.lc.mybatis.po类下的所有类都声明别名,默认的别名就是类名(类名大小写都可以)

                                                                                                                                                            1. <!-- 设置别名 -->
                                                                                                                                                              1. <typeAliases>
                                                                                                                                                                1. <!-- 批量设置别名 -->
                                                                                                                                                                  1. <!-- package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(类名首字母大小写都可以) -->
                                                                                                                                                                    1. <package name="com.lc.mybatis.po"/>
                                                                                                                                                                      1. </typeAliases>
                                                                                                                                                                    1.  

                                                                                                                                                                    mappers标签

                                                                                                                                                                    该标签的作用是加载映射文件

                                                                                                                                                                    方式一:<mapper resource=""/>

                                                                                                                                                                    该方式是加载相对于类路径下的映射文件:

                                                                                                                                                                      1. <mappers>
                                                                                                                                                                        1. <mapper resource="sqlmap/User.xml"/>
                                                                                                                                                                          1. </mappers>
                                                                                                                                                                        1.  

                                                                                                                                                                        方式二:<mapper url=""/>

                                                                                                                                                                        该方式使用全限定路径

                                                                                                                                                                        1. <mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

                                                                                                                                                                        方式三:<mapper class=""/>

                                                                                                                                                                        该方式使用mapper接口的全限定类名

                                                                                                                                                                        1. <mapper class="cn.itcast.lc.mapper.UserMapper"/>

                                                                                                                                                                        此方式要求:

                                                                                                                                                                        Mapper接口Mapper映射文件名称相同且在同一个目录下。

                                                                                                                                                                        方式四:<package name=""/>

                                                                                                                                                                        该方式是加载指定包下的所有映射文件

                                                                                                                                                                        1. <package name="cn.lc.mybatis.mapper"/>

                                                                                                                                                                        此方式要求:

                                                                                                                                                                        Mapper接口Mapper映射文件名称相同且在同一个目录下。

                                                                                                                                                                        五、映射文件

                                                                                                                                                                        5.1.输入映射parameterType

                                                                                                                                                                        第一种:简单类型

                                                                                                                                                                        #{}表示占位符?,parameterType接收简单类型的参数时,里面的名称可以任意

                                                                                                                                                                          1. <select id="findUserById" parameterType="java.lang.Integer" resultType="user">
                                                                                                                                                                            1. SELECT * FROM USER WHERE id = #{id}
                                                                                                                                                                              1. </select>
                                                                                                                                                                            1.  

                                                                                                                                                                            ${}表示拼接符,parameterType接收简单类型的参数时,里面的名称必须是value

                                                                                                                                                                              1. <select id="findUsersByName" parameterType="java.lang.String" resultType="com.lc.mybatis.po.User">
                                                                                                                                                                                1. SELECT * FROM USER WHERE username LIKE "%${value}%"
                                                                                                                                                                                  1. </select>
                                                                                                                                                                                1.  

                                                                                                                                                                                第二种:pojo类型

                                                                                                                                                                                这里通过用户的用户名进行模糊查询演示pojo类型

                                                                                                                                                                                在映射文件中添加模糊查询语句:

                                                                                                                                                                                  1. <!-- parameterType传递pojo类型 -->
                                                                                                                                                                                    1. <select id="findUsersByPojo" parameterType="com.lc.mybatis.po.User" resultType="com.lc.mybatis.po.User">
                                                                                                                                                                                      1. SELECT * FROM USER WHERE username LIKE "%${username}%"
                                                                                                                                                                                        1. </select>
                                                                                                                                                                                      1.  

                                                                                                                                                                                      user类

                                                                                                                                                                                        1. public class User {
                                                                                                                                                                                          1. private Integer id;
                                                                                                                                                                                            1. private String username;
                                                                                                                                                                                              1. private Date birthday;
                                                                                                                                                                                                1. private String sex;
                                                                                                                                                                                                  1. private String address;
                                                                                                                                                                                                    1. }
                                                                                                                                                                                                  1.  

                                                                                                                                                                                                  测试类:

                                                                                                                                                                                                    1. public class UserDao{
                                                                                                                                                                                                      1. //根据用户名进行模糊查询
                                                                                                                                                                                                        1. @Override
                                                                                                                                                                                                          1. public List<User> findUserByPojo(){
                                                                                                                                                                                                            1. //全局配置文件路径:
                                                                                                                                                                                                              1. String resource = "SqlMapConfig.xml";
                                                                                                                                                                                                                1. InputStream inputStream = Resources.getResourceAsStream(resource);
                                                                                                                                                                                                                  1. //创建SqlSessionFactory
                                                                                                                                                                                                                    1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                      1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                        1. User user = new User();
                                                                                                                                                                                                                          1. user.setUsetname("张三");
                                                                                                                                                                                                                            1. List<User> users = (List<User>)sqlSession.selectList("test.findUsersByPojo",user);//传入pojo
                                                                                                                                                                                                                              1. System.out.println(users);
                                                                                                                                                                                                                                1. sqlSession.close();
                                                                                                                                                                                                                                  1. return users;
                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                    1.  

                                                                                                                                                                                                                                    第三种:包装类型pojo

                                                                                                                                                                                                                                    这里通过用户名和用户地址对用户进行查询来演示包装类型pojo:

                                                                                                                                                                                                                                    首先创建包装pojo类:

                                                                                                                                                                                                                                      1. public class UserVO {
                                                                                                                                                                                                                                        1. private User user;
                                                                                                                                                                                                                                            1. public User getUser() {
                                                                                                                                                                                                                                              1. return user;
                                                                                                                                                                                                                                                1. }
                                                                                                                                                                                                                                                    1. public void setUser(User user) {
                                                                                                                                                                                                                                                      1. this.user = user;
                                                                                                                                                                                                                                                        1. }
                                                                                                                                                                                                                                                            1. }
                                                                                                                                                                                                                                                          1.  

                                                                                                                                                                                                                                                          在映射文件中添加查询语句:

                                                                                                                                                                                                                                                            1. <!-- parameterType传递pojo包装类型 -->
                                                                                                                                                                                                                                                              1. <select id="findUsersByPojo1" parameterType="com.lc.mybatis.po.UserVO" resultType="user">
                                                                                                                                                                                                                                                                1. SELECT * FROM USER WHERE username LIKE "%${user.username}%" AND address=#{user.address}
                                                                                                                                                                                                                                                                  1. </select>
                                                                                                                                                                                                                                                                1.  

                                                                                                                                                                                                                                                                测试类:

                                                                                                                                                                                                                                                                  1. public class UserDao{
                                                                                                                                                                                                                                                                    1. //根据用户名和地址进行查询
                                                                                                                                                                                                                                                                      1. @Override
                                                                                                                                                                                                                                                                        1. public List<User> findUserByPojo1(){
                                                                                                                                                                                                                                                                          1.                 //全局配置文件路径:
                                                                                                                                                                                                                                                                            1.                 String resource = "SqlMapConfig.xml";
                                                                                                                                                                                                                                                                              1.                 InputStream inputStream = Resources.getResourceAsStream(resource);
                                                                                                                                                                                                                                                                                1.                 //创建SqlSessionFactory
                                                                                                                                                                                                                                                                                  1.                 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                    1.                 SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                      1. User user = new User();
                                                                                                                                                                                                                                                                                        1. user.setUsetname("张三");
                                                                                                                                                                                                                                                                                          1.                 user.setAddress("郝汉山");
                                                                                                                                                                                                                                                                                            1.                 UserVO userVo = new UserVO();
                                                                                                                                                                                                                                                                                              1.                 userVo.setUser(user);
                                                                                                                                                                                                                                                                                                1. List<User> users = (List<User>)sqlSession.selectList("test.findUsersByPojo1",userVo);//传入pojo包装类
                                                                                                                                                                                                                                                                                                  1. System.out.println(users);
                                                                                                                                                                                                                                                                                                    1. sqlSession.close();
                                                                                                                                                                                                                                                                                                      1. return users;
                                                                                                                                                                                                                                                                                                        1. }
                                                                                                                                                                                                                                                                                                            1. }
                                                                                                                                                                                                                                                                                                          1.  

                                                                                                                                                                                                                                                                                                          第四种:map集合类型

                                                                                                                                                                                                                                                                                                          这里通过查询用户信息演示:

                                                                                                                                                                                                                                                                                                          在映射文件中添加该查询语句:

                                                                                                                                                                                                                                                                                                            1. <!-- parameterType传递hashmap类型 -->
                                                                                                                                                                                                                                                                                                              1. <select id="findUsersByMap" parameterType="java.util.Map" resultType="user">
                                                                                                                                                                                                                                                                                                                1. SELECT * FROM USER WHERE username LIKE "%${username}%" AND address=#{address}
                                                                                                                                                                                                                                                                                                                  1. </select>
                                                                                                                                                                                                                                                                                                                1.  

                                                                                                                                                                                                                                                                                                                测试方法:

                                                                                                                                                                                                                                                                                                                  1. public class UserDao{
                                                                                                                                                                                                                                                                                                                    1. //根据用户名和地址进行查询
                                                                                                                                                                                                                                                                                                                      1. @Override
                                                                                                                                                                                                                                                                                                                        1. public List<User> findUserByMap(){
                                                                                                                                                                                                                                                                                                                          1. //全局配置文件路径:
                                                                                                                                                                                                                                                                                                                            1. String resource = "SqlMapConfig.xml";
                                                                                                                                                                                                                                                                                                                              1. InputStream inputStream = Resources.getResourceAsStream(resource);
                                                                                                                                                                                                                                                                                                                                1. //创建SqlSessionFactory
                                                                                                                                                                                                                                                                                                                                  1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                                                                    1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                      1. Map<String,String> map = new HashMap<>();
                                                                                                                                                                                                                                                                                                                                        1.                 map.put("username","张三");
                                                                                                                                                                                                                                                                                                                                          1.                 map.put("address","郝汉山");
                                                                                                                                                                                                                                                                                                                                            1.                 List<User> users = (List<User>) sqlSession.selectList("test.findUsersByMap",map);//传入pojo包装类
                                                                                                                                                                                                                                                                                                                                              1. System.out.println(users);
                                                                                                                                                                                                                                                                                                                                                1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                  1. return users;
                                                                                                                                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                                                                                                                                        1. }
                                                                                                                                                                                                                                                                                                                                                      1.  
                                                                                                                                                                                                                                                                                                                                                      5.2.resultType结果映射

                                                                                                                                                                                                                                                                                                                                                      resultType结果映射要求:需要查询结果的列名和映射的对象的属性名一致,这样才能映射成功。如果映射没成功也不会报错,只是映射结果中对象的相应属性没有值,为空。如果映射的列名和对象中的属性名全部不一致,那么映射的对象为空。如果在使用sql语句查询的时候给查询结果列设置了别名,则别名要和映射结果对象的属性名一致,这样才能保证映射成功。

                                                                                                                                                                                                                                                                                                                                                      第一种:简单类型

                                                                                                                                                                                                                                                                                                                                                      注意: 如果结果映射为简单类型,则需要查询的结果为一列才能映射成功。

                                                                                                                                                                                                                                                                                                                                                      例如:查询用户表中用户的总数。

                                                                                                                                                                                                                                                                                                                                                      映射文件为:

                                                                                                                                                                                                                                                                                                                                                        1. <!-- resultType:输出为简单类型 -->
                                                                                                                                                                                                                                                                                                                                                          1. <select id="findUserCount" resultType="int">
                                                                                                                                                                                                                                                                                                                                                            1. select count(*) from user;
                                                                                                                                                                                                                                                                                                                                                              1. </select>
                                                                                                                                                                                                                                                                                                                                                            1.  

                                                                                                                                                                                                                                                                                                                                                            测试代码:

                                                                                                                                                                                                                                                                                                                                                              1. public class UserDao{
                                                                                                                                                                                                                                                                                                                                                                1. @Override
                                                                                                                                                                                                                                                                                                                                                                  1. public int findUserCount(){
                                                                                                                                                                                                                                                                                                                                                                    1. //全局配置文件路径:
                                                                                                                                                                                                                                                                                                                                                                      1. String resource = "SqlMapConfig.xml";
                                                                                                                                                                                                                                                                                                                                                                        1. InputStream inputStream = Resources.getResourceAsStream(resource);
                                                                                                                                                                                                                                                                                                                                                                          1. //创建SqlSessionFactory
                                                                                                                                                                                                                                                                                                                                                                            1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                                                                                                              1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                1. int userCount= sqlSession.selectOne("test.findUserCount");
                                                                                                                                                                                                                                                                                                                                                                                  1. System.out.println(userCount);
                                                                                                                                                                                                                                                                                                                                                                                    1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                      1. return userCount;
                                                                                                                                                                                                                                                                                                                                                                                        1. }
                                                                                                                                                                                                                                                                                                                                                                                            1. }
                                                                                                                                                                                                                                                                                                                                                                                          1.  

                                                                                                                                                                                                                                                                                                                                                                                          第二种:pojo结果映射

                                                                                                                                                                                                                                                                                                                                                                                          这里操作pojo输入映射。

                                                                                                                                                                                                                                                                                                                                                                                          5.3.resultMap结果映射

                                                                                                                                                                                                                                                                                                                                                                                          使用resultMap结果映射时,不需要查询出来的结果集的列名和映射结果对象的属性名相同,但是需要声明一个resultMap,手动的方式来对列名和对象属性进行映射。(resultMap一般用于多表关联映射)

                                                                                                                                                                                                                                                                                                                                                                                          例如:通过查询用户表中的用户,并对查询出来的用户表的列名设置别名。

                                                                                                                                                                                                                                                                                                                                                                                          映射文件添加查询语句:

                                                                                                                                                                                                                                                                                                                                                                                          [id]:定义resultMap的唯一标识

                                                                                                                                                                                                                                                                                                                                                                                          [type]:定义该resultMap最终映射的pojo对象

                                                                                                                                                                                                                                                                                                                                                                                          [id标签]:映射结果集的唯一标识列,如果是多个字段联合唯一,则定义多个id标签

                                                                                                                                                                                                                                                                                                                                                                                          [result标签]:映射结果集的普通列

                                                                                                                                                                                                                                                                                                                                                                                          [column]:SQL查询的列名,如果列有别名,则该处填写别名

                                                                                                                                                                                                                                                                                                                                                                                          [property]:pojo对象的属性名

                                                                                                                                                                                                                                                                                                                                                                                            1. <!-- 如果查询出来的列名有别名就不能通过resultType来接收输出类型了。需要通过resultMap来声明传出类型(resultMap需要声明) -->
                                                                                                                                                                                                                                                                                                                                                                                              1. <resultMap type="user" id="userMap">
                                                                                                                                                                                                                                                                                                                                                                                                1. <!-- id标签:专门查询结果中唯一列映射 -->
                                                                                                                                                                                                                                                                                                                                                                                                  1. <id column="id_" property="id"/>
                                                                                                                                                                                                                                                                                                                                                                                                    1. <!-- result标签:映射查询结果中的普通列 -->
                                                                                                                                                                                                                                                                                                                                                                                                      1. <result column="username_" property="username"/>
                                                                                                                                                                                                                                                                                                                                                                                                        1. <result column="address_" property="address"/>
                                                                                                                                                                                                                                                                                                                                                                                                          1. </resultMap>
                                                                                                                                                                                                                                                                                                                                                                                                            1. <select id="findUserResultMap" parameterType="int" resultMap="userMap">
                                                                                                                                                                                                                                                                                                                                                                                                              1. select id id_,username username_,address address_ from user where id=#{id}
                                                                                                                                                                                                                                                                                                                                                                                                                1. </select>
                                                                                                                                                                                                                                                                                                                                                                                                              1.  

                                                                                                                                                                                                                                                                                                                                                                                                              测试类:

                                                                                                                                                                                                                                                                                                                                                                                                                1. public class UserDao{
                                                                                                                                                                                                                                                                                                                                                                                                                  1. @Override
                                                                                                                                                                                                                                                                                                                                                                                                                    1. public User findUserResultMap(){
                                                                                                                                                                                                                                                                                                                                                                                                                      1. //全局配置文件路径:
                                                                                                                                                                                                                                                                                                                                                                                                                        1. String resource = "SqlMapConfig.xml";
                                                                                                                                                                                                                                                                                                                                                                                                                          1. InputStream inputStream = Resources.getResourceAsStream(resource);
                                                                                                                                                                                                                                                                                                                                                                                                                            1. //创建SqlSessionFactory
                                                                                                                                                                                                                                                                                                                                                                                                                              1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                                                                                                                                                                1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                  1. User user = sqlSession.selectOne("test.findUserResultMap",1);
                                                                                                                                                                                                                                                                                                                                                                                                                                    1. System.out.println(user);
                                                                                                                                                                                                                                                                                                                                                                                                                                      1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                        1. return user;
                                                                                                                                                                                                                                                                                                                                                                                                                                          1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                            1.  
                                                                                                                                                                                                                                                                                                                                                                                                                                            5.4.动态sql

                                                                                                                                                                                                                                                                                                                                                                                                                                            在mybatis中提供了一些动态sql标签,可以让我们开发效率更快,这些动态sql语句可以增加我们写的sql语句的重用性,常用的动态sql语句标签有:if标签、sql片段(需要先定义后使用)、where标签、foreach标签

                                                                                                                                                                                                                                                                                                                                                                                                                                            通过下面例子来演示动态sql常用的标签:

                                                                                                                                                                                                                                                                                                                                                                                                                                            需求分析:查询用户表中相关的用户。

                                                                                                                                                                                                                                                                                                                                                                                                                                            发出相关的sq语句有:select * from user where username like "%张三%" and address= ?;

                                                                                                                                                                                                                                                                                                                                                                                                                                            select * from user;

                                                                                                                                                                                                                                                                                                                                                                                                                                            select * from user where id in(1,2,10);

                                                                                                                                                                                                                                                                                                                                                                                                                                            如何才能让这些语句在我们需要的时候就使用,不需要的时候就不适用。其实我们发现这三条语句有很多重复的地方,我们如果能做到让重复的能够重复使用,没有重复的可以按我们需求使用的话就能减少我们写很多sql语句。当然动态sql就是帮我们解决这些问题的。

                                                                                                                                                                                                                                                                                                                                                                                                                                            映射文件:

                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <!-- 定义sql片段,用于可重用的sql片段 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <sql id="whereClause">
                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!-- if标签:可以对输入的参数进行判断 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!-- test:指定判断表达式 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <if test="user!=null">
                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <if test="user.username!=null and user.username!=''">
                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. AND username LIKE '%${user.username}%'
                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. </if>
                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <if test="user.address!=null and user.address!=''">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. AND address=#{user.address}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. </if>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. </if>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <if test="idList!=null">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. AND id IN
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <!-- foreach标签: 可以循环传入参数值 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <!-- collenction:标示pojo中集合属性的属性名称 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <!-- item:每次遍历出来的对象 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <!--open开始遍历时拼接的串-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!--close结束遍历时拼接的串-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!--separator遍历每个对象之间需要拼接字符-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <foreach collection="idList" item="item" open="(" close=")" separator=",">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. #{item}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. </foreach>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. </if>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. </sql>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <select id="findUserList" parameterType="userVO" resultType="user">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. SELECT * FROM USER
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <!-- where标签: 默认去掉第一个AND,如果没有参数就去掉where自己-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <where>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <!--引用sql语句片段-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <include refid="whereClause"></include>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. </where>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. </select>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              userVo类:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. public class UserVO {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. private User user;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. private List<Integer> idList;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. public List<Integer> getIdList() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. return idList;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. public void setIdList(List<Integer> idList) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. this.idList = idList;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. public User getUser() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. return user;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. public void setUser(User user) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. this.user = user;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        测试类:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. public class UserDao{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. @Override
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. public void findUserList(){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. //全局配置文件路径:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. String resource = "SqlMapConfig.xml";
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. InputStream inputStream = Resources.getResourceAsStream(resource);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. //创建SqlSessionFactory
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. //测试foreach语句执行
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.                 UserVO userVo = new UserVO();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.                 List<Integer> idList = new ArrayList<>();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.                 idList.add(1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.                 idList.add(2);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.                 idList.add(3);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.                 userVo.setIdList(idList);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.                 //测试select * from user where username like ? and address=?;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.                 //User user = new User();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.                 //user.setUsername("张三");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.                 //user.setAddress("武当山");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.                 //userVo.setUser(user);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.                 List<User> users = sqlSession.selectOne("test.findUserList",userVo);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.                 System.out.println(users);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            六、Mybatis之传统Dao层的开发(该方式很少用)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6.1.开发环境准备:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.个人使用的jdk为1.7

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2.开发工具是使用的Eclipse4.5

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3.数据库使用的MySQL5X

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4.导入mybatis所需要的jar包

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5.导入mysql数据库驱动包

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6.2.需求分析:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            根据ID查询查询用户、根据用户名称进行模糊查询、添加用户

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6.3.代码实现

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            创建用户表对应pojo类User:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. public class User {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. private Integer id;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. private String username;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. private Date birthday;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. private String sex;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. private String address;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. //setter和get方法省略
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          创建mybatis的全局配置文件SqlMapConfig.xml:用于配置数据源、事务、映射文件加载等信息

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <?xml version="1.0" encoding="UTF-8"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <!DOCTYPE configuration
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. "http://mybatis.org/dtd/mybatis-3-config.dtd">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <configuration>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <!-- 配置mybatis的环境信息 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <environments default="developments">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <environment id="developments">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <!-- 配置JDBC事务控制,由mybatis进行管理 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <transactionManager type="JDBC"></transactionManager>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <!-- 配置数据源,采用mybatis连接池 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <dataSource type="POOLED">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <property name="driver" value="com.mysql.jdbc.Driver"/>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <property name="username" value="root"/>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <property name="password" value="12345678"/>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. </dataSource>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. </environment>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. </environments>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!-- 加载映射文件 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <mappers>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <mapper resource="User.xml"/>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. </mappers>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. </configuration>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          创建需求开发的映射文件User.xml配置文件:并在全局配置文件中添加该映射文件

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <?xml version="1.0" encoding="UTF-8"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <!DOCTYPE mapper
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!--
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 注意:使用mapper代理开发时,namespace有特殊且重要的作用
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <mapper namespace="test">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <!-- 根据用户ID查询用户信息 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <!-- select:表示一个MappedStatement对象 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!-- id:statement的唯一标识 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!-- #{}:表示一个占位符?-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <!-- #{id}:里面的id表示输入参数的参数名称,如果该参数为简单类型,那么#{}里面的参数可以任意 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <!-- parameterType:输入参数的java类型 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <select id="findUserById" parameterType="java.lang.Integer" resultType="com.lc.mybatis.po.User">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. SELECT * FROM USER WHERE id = #{id}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. </select>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!-- 根据用户名进行模糊查询 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!-- ${}:表示一个sql连接符 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <!-- ${value}:里面的 value表示输入的名称,如果该参数是简单类型,那么${}里面的参数名称必须是value-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <!-- ${}这种写法存在sql注入的风险,所以需要 慎用!但是有些场景需要用到比如:排序,-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <select id="findUsersByName" parameterType="java.lang.String" resultType="com.lc.mybatis.po.User">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. SELECT * FROM USER WHERE username LIKE "%${value}%"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. </select>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!-- 添加用户: -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!--
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. [selectKey标签]:通过select查询来生成主键
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. [keyProperty]:指定存放生成主键的属性
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. [resultType]:生成主键所对应的Java类型
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. [order]:指定该查询主键SQL语句的执行顺序,相对于insert语句
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. [last_insert_id]:MySQL的函数,要配合insert语句一起使用,该函数在mysql中是执行在insert语句后。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <insert id="insertUser" parameterType="com.lc.mybatis.po.User">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <selectKey keyProperty="id" resultType="int" order="AFTER">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. SELECT LAST_INSERT_ID()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. </selectKey>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. INSERT INTO USER(username,sex,birthday,address) VALUES(#{username},#{sex},#{birthday},#{address})
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. </insert>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. </mapper>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              dao层接口:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. public interface UserDao {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. //根据用户id查询用户
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. public User findUserById(int id);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1.         //根据用户名进行模糊查询
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.         public List<User> findUsersByName(String name);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.         //添加用户
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.         public void addUser(User user);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1.  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  dao层的实现:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. public class UserDaoImpl implements UserDao{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. //通过构造方法注入sqlSessionFactory
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. private SqlSessionFactory sqlSessionFactory;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. this.sqlSessionFactory = sqlSessionFactory;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. //根据id查询用户
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. @Override
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. public User findUserById(int id) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. User user = sqlSession.selectOne("test.findUserById", id);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. System.out.println(user);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. return user;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. //根据用户名进行模糊查询
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. @Override
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. public List<User> findUsersByName(String name){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. List<User> users = sqlSession.selectList("test.findUsersByName",name);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. System.out.println(users);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. return users;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. //添加用户
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. public List<User> addUser(String name){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. User user = new User();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. user.setUsername("超哥2");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. user.setAddress("成都市");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. //调用SqlSession的增删改查方法
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. //第一个参数:表示statement的唯一表示
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. //第一个参数:表示占位符的
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. sqlSession.insert("test.insertUser", user);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. System.out.println(user.getId());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. //切记:增删改操作需要提交事务。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. sqlSession.commit();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. //关闭资源
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            测试类:这里就只通过根据id查找用户进行测试

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. public class UserDaoTest {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. private SqlSessionFactory sqlSessionFactory;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. @Before
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. public void setUp() throws IOException {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. @Test
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. public void testFindUserById() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. UserDao userDao = new UserDaoImpl(sqlSessionFactory);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. userDao.findUserById(1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        七、Mybatis之Mapper接口的开发方式

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        该方式开发,不需要写dao层的实现类,而是mybatis根据映射文件等信息对接口进行jdk动态代理生成代理类来实现接口中的方法,因此,采用这种方式,我们只需要编辑接口,而不需要去写实现。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7.1.需求分析

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        根据id查询用户。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7.2.Mapper开发代理规范

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1、mapper接口的全限定名要和mapper映射文件的namespace值一致。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2、mapper接口的方法名称要和mapper映射文件的statement的id一致。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4、mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7.3.代码实现

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        准备po类:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. public class User {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. private Integer id;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. private String username;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. private Date birthday;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. private String sex;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. private String address;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.         //getter和setter方法省略
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Mapper接口:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. public interface UserMapper {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. public User findUserById(int id);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            UserMapper.xml配置文件:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <?xml version="1.0" encoding="UTF-8"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <!DOCTYPE mapper
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <!--
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. 注意:使用mapper代理开发时,namespace有特殊且重要的作用
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <mapper namespace="com.lc.mybatis.mapper.UserMapper">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <!-- 根据用户ID查询用户信息 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!-- select:表示一个MappedStatement对象 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <!-- id:statement的唯一标识 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. <!-- #{}:表示一个占位符?-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. <!-- #{id}:里面的id表示输入参数的参数名称,如果该参数为简单类型,那么#{}里面的参数可以任意 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. <!-- parameterType:输入参数的java类型 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. <!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. <select id="findUserById" parameterType="java.lang.Integer" resultType="com.lc.mybatis.po.User">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. SELECT * FROM USER WHERE id = #{id}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. </select>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. </mapper>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  在全局配置文件SqlMapperConfig中添加该映射文件

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  测试代码:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. public class UserMapperTest {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. private SqlSessionFactory sqlSessionFactory ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. @Before
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. public void setUp() throws IOException {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. @Test
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. public void testFindUserById() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. //获取UserMapper的代理类
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. User user = userMapper.findUserById(10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. System.out.println(user);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. sqlSession.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1.  



                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        八、Mybatis一级缓存

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        mybatis提供查询缓存,如果缓存中有数据,就不用从数据库中获取,用于减轻数据压力,提高系统性能

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        一级缓存是sqlSession级别的缓存,在操作数据库的时候,需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的SqlSession的缓存区域(HashMap)是互相不受影响的。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        mybatis默认是支持一级缓存的。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8.1.证明一级缓存的存在:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        验证方法:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. public void testOneLevelCache() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. SqlSession sqlSession = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. //获取UserMapper的代理类
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. //第一次查询
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. User user = userMapper.findUserById(10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. System.out.println(user);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. //第二次查询
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. User user2 = userMapper.findUserById(10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. System.out.println(user2);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. sqlSes
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              通过执行该方法,查看打印日志可以看出就执行了一次sql语句的查询,因此可以判断第二次查询是没有从数据库中进行查询的。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              那当什么时候一级缓存会被清空呢?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              通过测试发现,当在第二次查询数据库之前对数据库进行了写的操作后,第二次查询就不会从缓存中查询结果,而是直接从数据中查询结果。另一种就是在第一查询结果后,手动的方式清空一级缓存(使用sqlSession.clearCache();方法。)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              测试方法:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              九、Mybatis二级缓存

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              二级缓存是Mapper级别的缓存。多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是夸SqlSession的。(二级缓存Mybatis默认是关闭的,需要自己去手动配置开启或可以自己选择用哪个厂家的缓存来作为二级缓存)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              9.1.开启二级缓存

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              首先在全局配置文件中配置开启二级缓存功能:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. <!-- 开启二级缓存总开关 -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <setting name="cacheEnabled" value="true"/>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                在映射文件中去选择是否该映射文件使用二级缓存:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                如果使用就进行以下配置,如果不是用,就不需要对映射文件做任何修改。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. <!-- 开启本mapper下的namespace的二级缓存,默认使用的是mybatis提供的PerpetualCache -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. <cache></cache>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  也可以设置选择二级缓存提工商

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  以下是我选择使用EhcacheCache缓存(注意:在使用EhcacheCache缓存需要导入jar包)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  最后就是,在需要缓存的po类中去实现序列化:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  验证二级缓存是否开启:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  验证方法如下:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. @Test
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. //测试二级缓存是否开启
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. public void testTwoLevelCache() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. SqlSession sqlSession1 = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. SqlSession sqlSession2 = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. SqlSession sqlSession3 = sqlSessionFactory.openSession();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. //获取UserMapper的代理类
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. User user1 = userMapper1.findUserById(10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. System.out.println(user1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. //当sqlSession1执行close()的时候,才把sqlSession1查询的结果写到二级缓存中去。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. sqlSession1.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. // User u = new User();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. // u.setUsername("小胖");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. // u.setAddress("成都");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. // u.setSex("2");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. // u.setBirthday(new Date());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. // userMapper3.insertUser(u);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. // //当其中任何一个sqlSession执行commit()方法后将刷新整个缓存区
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. // sqlSession3.commit();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. // sqlSession3.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. //第二次查询
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. User user2 = userMapper2.findUserById(10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. System.out.println(user2);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. sqlSession2.close();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1.  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  测试结果:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  同时通过测试,当在第二次查询的时候,向数据库提交数据后,就会对缓存进行刷新,这样在第二次查询的时候就没有走缓存,而是走的数据库。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  9.2.禁用二级缓存

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  由于二级缓存默认是关闭的,如果不开启就不会使用二级缓存。如果,我们开启了二级缓存,而在有些查询结果集中,不需要受到二级缓存影响,该怎么去做呢?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  在select查询中,默认是使用了二级缓存,如果不想使用二级缓存,就在select标签中有一个useCache的属性设置为false,就代表不使用二级缓存,每次进行查询数据都不会从缓存总获取,而是直接从数据库中进行查询。useCache的默认值是true,即代表statement使用二级缓存。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  9.3.刷新二级缓存

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  在statement中设置flushCache=true,可以刷新二级缓存。默认情况下,select语句中的flushCache是false。如果是insert、update、delete语句,那么flushCache的默认值是true。如果将select语句中的flushCache值改为true,就意味着查询语句的二级缓存失效,每次查询都会从数据库进行查询。如果将select语句的flushCache值为false,就代表该查询语句使用了二级缓存,如果在数据库中修改了数据,而二级缓存中的数据还是原来的数据,那么这样就会出现脏读。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  flushCache设置如下:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Mybatis全面详解——上(学习总结)的更多相关文章

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. 《Node.js开发实战详解》学习笔记

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. 一、Mybatis配置详解

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Mybatis配置详解 XML配置文件层次结构 下图展示了mybatis-config.xml的全部配置元素 properties元素 properties是一个配置属性的元素,让我们能在配置文件的上 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. zz详解深度学习中的Normalization,BN/LN/WN

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    详解深度学习中的Normalization,BN/LN/WN 讲得是相当之透彻清晰了 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Ba ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  6. IE8“开发人员工具”使用详解上(各级菜单详解)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  7. C++框架_之Qt的窗口部件系统的详解-上

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  8. ORM框架对比以及Mybatis配置文件详解

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  9. Linux常用命令详解上

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Linux常用命令详解上 目录 一.shell 二.Linux命令 2.1.内部命令与外部命令的区别 2.2.Linux命令行的格式 2.3.编辑Linux命令行的辅助操作 2.4.获得命令帮助的方法 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  随机推荐

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. 「HAOI2016」字符合并

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数.得到的新字符和分数由这\(k\)个字符确定.你 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. JS错误记录 - dom操作 - 排序

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    本次练习错误总结: 1. for循环要套到按钮的onclick里面,否则onclick点击事件无法依次执行. 2. var n1, var n2 这两个变量是arr.sort排序使用的,所以应该放在s ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. vsphere client和vsphere web client的区别

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    vsphere client是一个运行在windows桌面上的客户端,在linux环境下无法运行,在vsphere5.0以后,VMware在逐渐弱化vsphere client的作用,现在很多高级功能 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  4. NYOJ 927 The partial sum problem 【DFS】+【剪枝】

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The partial sum problem 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 One day,Tom's girlfriend give him a ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  5. 【Cocos2d-x 017】 多分辨率适配全然解析

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    转:http://blog.csdn.net/w18767104183/article/details/22668739 文件夹从Cocos2d-x 2.0.4開始,Cocos2d-x提出了自己的多分 ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  6. Leetcode47: Palindrome Linked List

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Given a singly linked list, determine if it is a palindrome. 推断一个链表是不是回文的,一个比較简单的办法是把链表每一个结点的值存在vect ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  7. 取消cp命令别名

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. 取消cp命令别名unalias cpcp -rf恢复别名alias cp='cp -i'2.关闭当前用户下的cp别名配置sed -i "s/alias cp='cp -i'/#alia ...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  8. String类型转Long类型需要注意的问题

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    转自:https://blog.csdn.net/m819177045/article/details/52669785/

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  9. NET Framework 4.5 有更加简便的方法 Task.Run()

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    NET Framework 4.5 有更加简便的方法 Task.Run()

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  10. SpringBoot+springmvc异步处理请求

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    有两种情况,第一种是业务逻辑复杂,但不需要业务逻辑的结果,第二种是需要返回业务逻辑的处理结果 第一种比较简单,利用多线程处理业务逻辑,或者利用spring中@Asyn注解更简单, 使用@Asyn注解, ...