一. 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>

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”可知,写别名时不区分大小写

当输入的参数为包装类时

接口

核心映射文件

测试

  

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

  1. 音乐出身的妹纸,零基础学习JAVA靠谱么

    问:表示音乐出身的妹纸一枚  某一天突然觉得身边认识的是一群程序员   突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...

  2. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  3. 06Mybatis_入门程序——根据用户的名字模糊查询返回List集合

    本篇论文讲的是模糊查询然后返回的是一个list集合. 这片文章的案例是基于上一篇文章的,所以主要修改两处地方就可以了. 1.user.xml 2.Mybatis_first.java user.xml ...

  4. 零基础学习java------34---------登录案例,域,jsp(不太懂),查询商品列表案例(jstl标签)

    一. 简单登录案例 流程图: 项目结构图 前端代码: <!DOCTYPE html> <html> <head> <meta charset="UT ...

  5. 七天从零基础学习android(2)--第一个安卓程序

    在环境配置的那一部分,已经把基础的环境配置好了,接下来应该实现第一个安卓程序,就是著名的hello world 先在avd里面新建一个虚拟机,并且启动它 然后该虚拟机器能够在eclipse上正常识别 ...

  6. 零基础学习iOS开发

    零基础学习iOS开发不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍了函数的定义和使 ...

  7. 零基础学Java,PayPal技术专家手把手带你入门

    在最权威的 TIOBE 编程语言排名榜单上,Java 常年稳居第一,可以说是世界上应用最为广泛的一门语言. 同时,在微服务.云计算.大数据.Android App 开发等领域,Java 也是当之无愧的 ...

  8. Mybatis学习(一)—————mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  9. Android零基础入门第36节:Android系统事件的响应

    原文:Android零基础入门第36节:Android系统事件的响应 在开发Android应用时,有时候可能需要让应用程序随系统设置而进行调整,比如判断系统的屏幕方向.判断系统方向的方向导航设备等.除 ...

随机推荐

  1. 原串反转 牛客网 程序员面试金典 C++ Python

    原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...

  2. 重学STM32---(十)之CAN通信(二)

    目录 前言 程序编写 主代码 测试 前言   CAN协议是非常难的,但是在stm32中却是简单的,只需要我们配置寄存器即可,,,即使这样,我在学习的时候也遇到了许多困难 程序编写 1.开时钟,不用说 ...

  3. hdu 4788 Hard Disk Drive (水题)

    题意: Input The first line contains an integer T, which indicates the number of test cases. For each t ...

  4. eclipse javaEE版下载过程中选择镜像(Select Another Mirror)无反应解决办法,附带eclipse javaEE版下载教程。

    1.eclipse javaEE版下载过程中选择镜像(Select Another Mirror)无反应 (复制该网址下载即可 https://mirrors.neusoft.edu.cn/eclip ...

  5. Typora 快捷方式

    1.标题编写 方法一:几个#号 代表几级标题  (共6级) 方法二:ctrl +1 .2.3.4.5.6 2.如何编写子标题 第一种:无序子标题(无序列表) *号  +  空格书写标题文本   (输入 ...

  6. 使用NLog把日志写入数据库并按天自动分表

    前言 最近用Asp.net Core开发程序的时候 因为时间的关系,就没有过多的去关注日志方面的功能 都是直接用系统的ILogger先记录着,然后看日志的时候就先在命令行看日志 在开发阶段没有什么问题 ...

  7. 攻防世界 WEB 高手进阶区 upload1 Writeup

    攻防世界 WEB 高手进阶区 upload1 Writeup 题目介绍 题目考点 文件上传漏洞 一句话木马 中国菜刀类工具的使用 Writeup 使用burpsuite抓包 可见只是对上传文件的后缀进 ...

  8. shiro session返回问题

    /** * 3.会话管理器 */ public DefaultWebSessionManager sessionManager() { CustomSessionManager sessionMana ...

  9. Windows内核中的CPU架构-8-任务段TSS(task state segment)

    Windows内核中的CPU架构-8-任务段TSS(task state segment) 任务段tss(task state segment)是针对于CPU的一个概念. 举一个简单的例子,你一个电脑 ...

  10. Fastjson妙用之@JSONField注解

    在开发的过程中使用json格式的地方非常多,现在前后端分离的项目中,前后端数据交换的格式一般为json,这种格式的优/缺点这里不再赘述,感兴趣的可以百度.把java中的实体类序列化为json的方式也有 ...