zoukankan      html  css  js  c++  java
  • 零基础学习java------36---------xml,MyBatis,入门程序,CURD练习(#{}和${}区别,模糊查询,添加本地约束文件) 全局配置文件中常用属性 动态Sql(掌握)

    一. xml 

    1. 文档的声明

    2. 文档的约束,规定了当前文件中有的标签(属性),并且规定了标签层级关系

     其叫html文档而言,语法要求更严格,标签成对出现(不是的话会报错)

    3. 作用:数据格式,存储数据,传输数据     配置文件(主要的作用)

    4. xml 解析:

    (1).DOM  将数据加载到对象中,不适合解析大文件    xml操作

    (2)SAX     解析大文件(一行一行的进行解析)           无法操作

    二. mybatis简介(知道)

           MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。是一个基于java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs),MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。  

          MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普         通的Java 对象)映射成数据库中的记录.

    大致流程

     简单来说,MyBatis是一个持久层框架,用来操作数据库

    目的:使sql语句和java代码分离

    优点:

    (1)解耦合:sql和java代码的耦合

    (2)简化sql的开发,关注点只在sql的书写(原先关注点:sql,连接资源,数据集)

     

    三  入门程序(掌握)

    1.1  开发步骤

    (1)创建java项目

    (2)导入jar包       mybatis   mysql驱动   log4j

    (3)全局配置文件(SqlMapConfig.xml),别忘了加载核心映射文件

    (4)映射文件和(mapper)接口,如:UserMapper.java    UserMapper.xml

    (5)测试

      a. 加载全局配置文件

      b. 根据全局配置文件创建SqlSessionFactory对象

      c  利用SqlSessionFactory开启SqlSession对象(会话)

      d  根据SqlSession获取代理对象,使用UserMapper接收

      e   UserMapper调用方法  

    1.2 代码实现

    1.2.1  创建java项目并导入jar包

    1.2.2  全局配置文件   SqlMapConfig.xml(放在创建的source folder文件中)  

     代码如下(两部分:1.环境信息  2. 扫描核心映射文件和对应接口部分)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <!-- 配置mybatis的环境信息 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用dbcp连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="feng"/>
            </dataSource>
        </environment>
    </environments>
        <!-- 扫描所有的核心映射文件和对应的接口 -->
        <mappers>
            <package name="com._51doit.mapper" /> 
        </mappers>
    </configuration>
    View Code

    1.2.3 核心映射文件和mapper接口

     接口(UserMapper)

    public interface UserMapper {
        // 获取所有User信息
        public List<User> getAllUser() throws Exception;
    }

    映射文件(UserMapper.xml)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper    
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper  namespace="com._51doit.mapper.UserMapper"> // 此处接口的全类名用来找到相应接口,若没有的话,多个接口可能会有同样的方法,就可能找错方法
        <select resultType="com._51doit.pojo.User" id="getAllUser"> //此处resultType的类型为其调用方法返回值(泛型)的类型
            select * from user
        </select>
    </mapper>

    1.2.4 测试部分

    查询所有用户

    public class Demo1 {
        public static void main(String[] args) throws Exception {
            // 1 加载全局配置文件
            InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
            // 2 根据全局配置文件,创建SqlSessionFactory
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
            // 3 利用SqlSessionFactory开启具体的执行某张表数据的会话   SqlSession
            SqlSession session = factory.openSession();
            // 4 使用SqlSession获取代理对象,用于执行sql语句
            UserMapper userMapper = session.getMapper(UserMapper.class);
            // 5 执行sql语句
            List<User> list = userMapper.getAllUser();
            for (User user : list) {
                System.out.println(user);
            }
        }
    }

    总结:

      全局配置文件:(1)必须配置数据源信息  (2)必须加载mapper文件

    规范:

    (1) mapper核心映射文件和对应的mapper接口名称一致

    (2)mapper核心映射文件中的namespace的值是对应接口的全类名

    (3)CRUD标签的id值唯一,且和对应接口的方法名一致

    (4)CRUD标签的resultType的值就是对应方法的返回值类型(泛型)

    (5)CRUD标签的parameterType的值就是对应方法的参数类型

    基本概念:

      parameterType:输入参数          resultType:输出参数

    四  CURD练习

    1.1 根据用户id查询用户信息

    核心映射文件和mapper接口(其他同上面查询所有用户信息)

     接口部分定义一个根据id获取用户信息的方法(在接口中方法默认是public修饰

    1.2 根据用户名模糊查询用户信息

    mapper接口

     映射文件

     #{} 和 ${}区别

    #() : 相当于占位符,其用于简单类型的数据取值,取值的key随意(不需要与方法中的参数名一致)

      可以防止sql注入,但是like    order  by后面的值不能使用#{}取

    $() : 这种取值方式一般不使用(因为不能防止sql注入),但#{}是用不了的情况(like   order by)下就只能使用此取值

      当要取的数据类型为简单数据类型时,只能使用value取值(如上面名字的模糊查询)

    1.3 对商品表操作

    (1)查询所有的商品信息

    (2)根据商品id查询所有的商品信息

    (3)根据商品name查询所有的商品信息

    (4)根据商品价格查询所有的商品信息

    以上同上面查询用户类似

    5)根据商品的id更新商品信息

    此处输入参数只有一个,若有多个参数,则封装一个pojo类进行传输(本例即使如此)

     接口

     核心映射文件

     此处的配置可以在核心映射文件中设置,但是有局限性,若是关联查询时,还要在其他核心映射文件进行配置,不方便,解决方法:直接在全局配置文件中进行配置,如下

     这种形式不太好,若有多个POJO类(别名)就要进行多次配置,怎样能一次到位呢?,解决方法如下

     这样pojo包中的所有别名都可以被扫描到

    测试部分

     注意:此处可以将日志设置成输出至控制台------->在conf文件夹中添加log4j.properties文档,如下

    log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    (6)插入商品信息

    接口

     核心映射文件

     测试部分

     (7)删除一个商品信息(与读取一个商品信息类似)

    (8) 删除多个商品(难点在于核心映射文件)

    分析:此处的难点在于是删除多个商品,测试部分要传多个商品id信息(可以通过数组)给接口方法,但在核心配置文件中如何接受这个数组呢?====>使用foreach标签

    接口部分

     核心映射文件

     测试部分

     

    1.4 添加xml文件本地约束

      xml文件有提示功能的原因是在约束信息处的url地址,当有网时,岂会自动去此地址下载约束文件,若没王络的话就不会有提示,这个时候就需要添加xml文件的本地约束

    具体操作如下

     

     

     五. 全局配置文件中常用属性(掌握)

    1. <properties resource="db.properties"></properties>

    用来配置四大参数

     2. POJO类别名(alias)的配置(typeAliases)

    在全局配置文件中配置

     3. datasource:配置数据源

     4. mappers:扫描核心映射文件和对应的接口

    六. 常用对象和mapper映射文件中的属性

    1. 对象

     2. 核心映射文件中的属性

     七. 动态sql

    用处:查询用户信息,但需求不太确定,如当满足A条件时,查A,满足B条件时,查B

    接口

     核心映射文件

     测试部分

    以下是没有加条件的代码

    执行的sql语句就为 select * from user,若设置下user和sex的值,则sql语句就会改变,如下:

     此时的sql语句变为

     

     为了判断条件或者查询字段的重复利用,可以用sql标签将调降包裹起来

     由上面的resultType="user"和parameterType=“user”可知,写别名时不区分大小写

     当输入的参数为包装类时

    接口

     核心映射文件

     测试

      

  • 相关阅读:
    Spring Boot初学
    Spring MVC必须知道的执行流程
    日志Log4j使用
    SpringMVC处理中文乱码
    Maven设置阿里云镜像
    Maven项目中配置文件导出问题
    使用Limit实现分页
    web项目中设置首页
    JVM 学习笔记记录
    Python内存管理&垃圾回收机制
  • 原文地址:https://www.cnblogs.com/jj1106/p/11644638.html
Copyright © 2011-2022 走看看