1.Mybatis 的作用
完成基本的sql语句 和 存储过程 高级的对象关系映射(ORM) 框架
封装了几乎所有的 JDBC 代码 参数的手工设置 结果集的遍历

2.Mybatis 框架的主体构成
     实体类 用来封装数据
     SQL定义文件 定义sql语句的
     主配置文件 配置连接数据库信息 和 加载SQL定义文件
     框架API 通过SqlSession 来完成对应的功能。

3.Mapper 映射器的规则  (Mapper映射器的意思是 可以根据接口 自动生成实现类)

3.1 接口中的方法名 和 Mapper 文件中 id 保持一致
32 接口方法的参数 和 parameterType 保持一致 如果没有 parameterType
则参数可以根据实际情况自由设计。
3.3 方法的返回值 和 resultType 尽量一致
如果select 最多返回一个值 则 resultType 保持完全一致
如果select 可能返回 多个值 则返回 List<resultType>
DML(insert delete update) 可以设计成void 也可以返回 int
3.4 Mapper文件 中 namespace 必须是 包名.接口名

4.为了简化 类型的编写 可以给类型起别名
<configuration>
<typeAliases>
<typeAlias type="com.xdl.bean.XdlBankAccount" alias="account"/>
</typeAliases>
5. 当数据库中的字段名 和 bean 的属性名不一致时如何处理?
     5.1 通过给数据库中的字段 起别名来解决
    5.2 使用 resultMap 来 指定数据库字段 和 bean 中属性的对应关系

下面说一下Mybaties的变成步骤:

首先还是导入Mybaties.jar,和Ojdbc的包,

拷贝一个slqMapper配置文件到类路径下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<!-- typeAliases开启别名标注 -->
<typeAliases>
<typeAlias type="cn.com.bean.BankAccount" />
</typeAliases> <environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/com/mapper/AccountMapper.xml" />
</mappers>
</configuration>

创建一个映射包,cn.com.mapper,并创建一个账户的映射,用于存储sql语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="cn.com.Dao.BankAccountDAO"><!-- 命名空间必须和包名,类名相同 -->
<!-- 定义SQL语句 --> <select id="findAccountById" parameterType="int"
resultType="cn.com.bean.BankAccount">
select * from XDL_BANK_ACCOUNT where id=#{n}
</select> <select id="findCount" resultType="int">
select count(*) from
XDL_BANK_ACCOUNT
</select> <select id="findAccountByNo" parameterType="java.lang.String"
resultType="cn.com.bean.BankAccount">
select * from XDL_BANK_ACCOUNT where acc_no=#{n}
</select> <select id="findAccountByName" parameterType="cn.com.bean.BankAccount"
resultType="cn.com.bean.BankAccount">
select * from XDL_BANK_ACCOUNT where acc_no = #{acc_no} and
acc_password = #{acc_password}
</select> <select id="findAccountGtId" parameterType="int"
resultType="cn.com.bean.BankAccount">
select * from XDL_BANK_ACCOUNT where id > #{id}
</select> <select id="findAccountMinId" parameterType="int"
resultType="cn.com.bean.BankAccount">
select * from XDL_BANK_ACCOUNT where id &lt; #{id} </select> <select id="findAccountMinId2" parameterType="int"
resultType="cn.com.bean.BankAccount">
select * from XDL_BANK_ACCOUNT where id <![CDATA[<]]>
#{id}
</select> <!-- 定义一个插入语句 -->
<insert id="insertAccount" parameterType="cn.com.bean.BankAccount">
insert into
XDL_BANK_ACCOUNT values
(XDL_BANK_ACCOUNT_ID_SEQ.nextval,#{acc_no},#{acc_password},#{acc_money})
</insert> <delete id="deleteAccouontById" parameterType="int">
delete from
XDL_BANK_ACCOUNT where id=#{id}
</delete> <update id="updateAccountById" parameterType="cn.com.bean.BankAccount">
update
XDL_BANK_ACCOUNT set
acc_no=#{acc_no},acc_password=#{acc_password},acc_money=#{acc_money}
where id=#{id}
</update> <!-- 根据账号和密码查询银行账户 -->
<select id="getAccountByAccNOAndPassword" resultType="cn.com.bean.BankAccount">
select *
from XDL_BANK_ACCOUNT where acc_no=#{param1} and
acc_password=#{param2}
</select> <!-- <select id="getAccountByAccNOAndPassword2" resultType="cn.com.bean.BankAccount">
selsect * from XDL_BANK_ACCOUNT where acc_no=#{param1} and acc_password=#{param2}
</select> --> <!-- 如果类型中的名字不相同 -->
<resultMap type="cn.com.bean.BankAccount2" id="account2">
<result column="id" property="acc_id" />
</resultMap>
<select id="getAccountByAccNOAndPassword2" resultMap="account2">
select * from XDL_BANK_ACCOUNT where acc_no=#{param1} and acc_password=#{param2}
</select>
</mapper>

这里面的特殊字符如大于号,小于号需要特殊处理:

&lt;           < 小于号         
&gt; >               大于号
&amp; &
&apos;  ’ 单引号
&quot;  " 双引号

或者:

因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 
你的可以写成这个:

mapper文件示例代码
<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>

接着上面的说,再写一个dao接口:

public interface BankAccountDAO {
BankAccount findAccountById(int id); int updateAccountById(BankAccount acc); List<BankAccount> findAccountGtId(int id); BankAccount getAccountByAccNOAndPassword(String acc_no,String acc_password); BankAccount getAccountByAccNOAndPassword2(String acc_no,String acc_password); }

写一个工具类,以便后期我们创建SqlSession使用,

public class SqlSessionUtil {
private static SqlSessionFactory ssf = null;
static {
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
InputStream inputs = BankSessionTest.class.getClassLoader().getResourceAsStream("sqlmap-config.xml");
ssf = ssfb.build(inputs);
} public static SqlSession getSqlSession() {
return ssf.openSession();
}
}

好了,开始测试:

 public static void main(String[] args) {

        BankAccountDAO dao=new BankAccounDaoIMP();
/*BankAccount acc=dao.findAccountById(46);
System.out.println(acc);*/
/*
int updateAccountById = dao.updateAccountById(new BankAccount(9, "han", "21345", 88888));
System.out.println(""+updateAccountById);*/ /*BankAccount accountd = dao.getAccountByAccNOAndPassword("1111", "2222");
System.out.println(accountd.toString());
*/
// BankAccount accountBy = dao.getAccountByAccNOAndPassword2("1111", "2222");
// System.out.println(accountBy.toString());
BankAccount account = dao.getAccountByAccNOAndPassword2("1111", "2222");
System.out.println(account.toString()); }

Mybatis初始的更多相关文章

  1. mybatis 初始

    接下来带着大家建立一个mybatis的初级项目 首先我们利用idea利用maven建立一个空项目 然后输入名称什么的就会创建一个空的maven项目了 然后我们需要在项目总得pom.xml中进行配置信息 ...

  2. 初始MyBatis

    初始MyBatis 框架的概念: 框架是一个提供可重复的功用结构的半成品.它为我们构建新的应用程序提供了极大的便利,一方面提供了可以拿来就用的工具,更重要的是提供了可重用的设计.D 框架技术的优势: ...

  3. 初始MyBatis、SQL映射文件

    MyBatis入门 1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub.是一个基于 ...

  4. MyBatis 框架系列之基础初始

    1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只 ...

  5. mybatis笔记 - 初始配置及dao的封装

    1.用户实体类 package com.javasm.entity; /** * *TODO 用户表实体类 * @author CaoLei 2018年6月26日上午10:50:12 * Manage ...

  6. 初始Mybatis,好累,自己感觉自己快坚持不了了

    Mybatis1.持久化 持久化,就是内存数据和硬盘数据状态的转换 2.ORM思想Object Relation Mapping 对象关系映射 3.MyBatis入门案例 3.1导入jar包 依赖 & ...

  7. Mybatis学习——初始MyBatis

    什么是MyBatis框架? MyBatis框架是一种ORM(既对象关系映射)框架. 什么是ORM框架? 是一种为了解决面向对象与关系数据库之间数据不匹配的技术,它通过描述Java对象和关系数据库表之间 ...

  8. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  9. spring+springmvc+mybatis xml配置文件

    一.jdbc.properties 文件: driver=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.31.xxx:3306/abc?useUnicod ...

随机推荐

  1. ASP.NET Core使用Ping判断网络是否接通

    static void Main(string[] args) { // 主机地址 string targetHost = "bing.com"; string data = &q ...

  2. “全栈2019”113篇Java基础学习资料及总结

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. ROS(机器视觉)

    通过ROS打开摄像头 查看话题信息和消息 图像数据: 默认调用笔记本自带摄像头,如需调用外接摄像头,需要将其中video0改成video1.

  4. Elasticsearch(八)【NEST高级客户端--分析器】

    分析 分析是将文本(如任何电子邮件的正文)转换为添加到反向索引中进行搜索的tokens或terms的过程. 分析由analyzer执行,分析器可以是内置分析器或每个索引定义的定制分析器. 书写分析器测 ...

  5. [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:Tree作为PopUpButton ...

  6. PDF转HTML的方法。

    上个项目客户提出了一个需求,要求把PDF格式的文件转化为HTML格式. 上网查了一下,要么使用软件处理,要么是HTML格式转化为PDF.因为涉及到图文识别问题,所以说仅仅依靠前端不能实现.在网上查了几 ...

  7. 关于iframe切换的问题

    定位不到元素的另一种问题是有这种iframe,所有我们需要切换到该页面中去 1.首先找到这个iframe的位置,像上图有id属性我们直接  iframe = driver.find_element_b ...

  8. Protobuf底层存储原理

    参考官网, 序列化原理 底层二进制存储 message Test1 { optional int32 a = 1; } 并设置为a=150,序列化到一个文件中,查看文件,得到下面的二进制: 08 96 ...

  9. 对称矩阵与压缩存储算法(java实现)

    package 数组和矩阵; public class DuiChenJuZhenYaSuo { int[] arr; int order; //矩阵的阶数 int n; //压缩后一位数组的个数 p ...

  10. QuantLib 金融计算——随机过程之一般 Black Scholes 过程

    目录 QuantLib 金融计算--随机过程之一般 Black Scholes 过程 一般 Black Scholes 过程 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib ...