一. 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. Spoj 2878 KNIGHTS - Knights of the Round Table | 双联通分量 二分图判定

    题目链接 考虑建立原图的补图,即如果两个骑士不互相憎恨,就在他们之间连一条无向边. 显而易见的是,如果若干个骑士在同一个点数为奇数的环上时,他们就可以在一起开会.换句话说,如果一个骑士被一个奇环包含, ...

  2. java线程同步以及对象锁和类锁解析(多线程synchronized关键字)

    一.关于线程安全 1.是什么决定的线程安全问题? 线程安全问题基本是由全局变量及静态变量引起的. 若每个线程中对全局变量.静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线 ...

  3. Swift-Framework(一)访问资源文件

    摘要 Framework 就是在 APP 应用中的一种封装功能的表现形式,虽然不能独立运行,但是也可以在它里面存放和访问图片.语音等资源文件,可算是麻雀虽小,五脏俱全. 毕竟不是 APP 工程,所以 ...

  4. initNativeTransServiceId . ntrans:object componentId :-368613127 微信小程序

    二维码打开的页面是否存在 注意:体验版二维码默认路径是 pages/index/index 我的因为分包的原因调整了首页路径 所以路径是pages/tabBar/search/search 如果不是这 ...

  5. js 鼠标和键盘事件

    js 鼠标和键盘事件 鼠标事件 聚焦事件 离焦事件 鼠标单击和双击 鼠标的其他事件 鼠标事件对象 键盘事件 鼠标事件 聚焦事件 <input type="text" id=& ...

  6. SpringCloud 2020.0.4 系列之 Stream 消息广播 与 消息分组 的实现

    1. 概述 老话说的好:事情太多,做不过来,就先把事情记在本子上,然后理清思路.排好优先级,一件一件的去完成. 言归正传,今天我们来聊一下 SpringCloud 的 Stream 组件,Spring ...

  7. 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗

    开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东西 我心想:哥们真是 ...

  8. Python基础(list与tuple)

    #list 类似于数组的概念 classmates = ['傻狗1','傻狗2','傻狗3'] # print(classmates) # print(len(classmates)) # print ...

  9. Mui中mui.openWindow()方法具体参数信息(内容来自Mui问题专区)

    mui.openWindow({ url: 'xxx.html', //String类型,要打开的界面的地址 id: 'id', //String类型,要打开的界面的id styles: { //We ...

  10. 【JAVA】笔记(8)--- java.lang.String 精讲

    String 特性: 1.String 表示字符串类型,属于引用数据类型,所以其储存的是地址: 2.java 中规定,双引号括起来的字符串是不可变的,也就说" name "永远也只 ...