一. 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. Android现有工程使用Compose

    Android现有工程使用Compose 看了Compose的示例工程后,我们也想使用Compose.基于目前情况,在现有工程基础上添加Compose功能. 引入Compose 首先我们安装 Andr ...

  2. 干货分享之spring框架源码分析02-(对象创建or生命周期)

    记录并分享一下本人学习spring源码的过程,有什么问题或者补充会持续更新.欢迎大家指正! 环境: spring5.X + idea 之前分析了Spring读取xml文件的所有信息封装成beanDef ...

  3. Linux基本命令学习-文件基本操作1

    关机重启 shutdown -h now #立即关机 shutdown -h 5 # 5秒后关机 #重启 shutdown -r now #立即重启 reboot halt #重启 文件相关 系统目录 ...

  4. Linux mem 2.5 Buddy 内存回收机制

    文章目录 1. 简介 2. LRU 组织 2.1 LRU 链表 2.2 LRU Cache 2.3 LRU 移动操作 2.3.1 page 加入 LRU 2.3.2 其他 LRU 移动操作 3. LR ...

  5. 暑假算法练习Day3

    第三天!!!最近要开始归纳总结Python学习啦!! 1006 换个格式输出整数 (15 分) 让我们用字母 B 来表示"百".字母 S 表示"十",用 12. ...

  6. Mac下Shell脚本使用学习笔记(一)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 1.使用终端创建test.sh: (1)进入指定文件夹路径(命令示例:cd Desktop/面向对象程序设计): (2)创 ...

  7. centos7.6自动化安装mysql5.5

    一.目的 简化安装mysql的安装过程,局限很大,仅支持centos7.6上安装mysql5.5.60,如果想在其他版本的操作系统安装mysql,请自行修改有关变量. 如果想了解mysql安装的具体过 ...

  8. 96-00年CPU功耗感知调度研究

    最近读了一些1996-2000年的通过调度来降低cpu能耗的文章,主要文章有[1] [2] [3] [4] [5], 简单总结一些该时期单核CPU功耗感知的调度策略. 该时期还出现了很多关于低功耗电路 ...

  9. Java包装类,以及Integer与int之间的比较

    一.Java的基本类型 Java语言中提供了八种基本类型,包括六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. 整数型,包括byte.short.int.long,默认初始值是0 ...

  10. [cf1491F]Magnets

    首先,只需要找到一个有磁性的位置,就可以通过$n-1$次判断其余磁铁是否有磁性,因此也就是要在$\lfloor\log_{2}n\rfloor+1$次中找到一个有磁性的位置 有一个$n-1$次的做法, ...