Mybatis初始
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 < #{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>
这里面的特殊字符如大于号,小于号需要特殊处理:
| < | < | 小于号 |
| > | > | 大于号 |
| & | & | 和 |
| ' | ’ | 单引号 |
| " | " | 双引号 |
或者:
因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析
你的可以写成这个:
<![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初始的更多相关文章
- mybatis 初始
接下来带着大家建立一个mybatis的初级项目 首先我们利用idea利用maven建立一个空项目 然后输入名称什么的就会创建一个空的maven项目了 然后我们需要在项目总得pom.xml中进行配置信息 ...
- 初始MyBatis
初始MyBatis 框架的概念: 框架是一个提供可重复的功用结构的半成品.它为我们构建新的应用程序提供了极大的便利,一方面提供了可以拿来就用的工具,更重要的是提供了可重用的设计.D 框架技术的优势: ...
- 初始MyBatis、SQL映射文件
MyBatis入门 1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub.是一个基于 ...
- MyBatis 框架系列之基础初始
1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只 ...
- mybatis笔记 - 初始配置及dao的封装
1.用户实体类 package com.javasm.entity; /** * *TODO 用户表实体类 * @author CaoLei 2018年6月26日上午10:50:12 * Manage ...
- 初始Mybatis,好累,自己感觉自己快坚持不了了
Mybatis1.持久化 持久化,就是内存数据和硬盘数据状态的转换 2.ORM思想Object Relation Mapping 对象关系映射 3.MyBatis入门案例 3.1导入jar包 依赖 & ...
- Mybatis学习——初始MyBatis
什么是MyBatis框架? MyBatis框架是一种ORM(既对象关系映射)框架. 什么是ORM框架? 是一种为了解决面向对象与关系数据库之间数据不匹配的技术,它通过描述Java对象和关系数据库表之间 ...
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- spring+springmvc+mybatis xml配置文件
一.jdbc.properties 文件: driver=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.31.xxx:3306/abc?useUnicod ...
随机推荐
- C博客作业05—指针
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 理解了指针在代码中的使用方法,学会使用指针进行参数操作 学会了结构体的定义方式与结构体的使用 经过持续一个周 ...
- WPF InkCanvas EditingMode为Select时 在其选择时各种事件中撤销Select模式的方法
InkCanvas有多种输入模式. 通过InkCanvasEditingMode来进行对其调整 分别是 None=0// 忽略鼠标和手写笔输入 Ink = 1// 允许用户绘制批注,默认模式.使用鼠标 ...
- “全栈2019”Java多线程第二章:创建多线程之继承Thread类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- mxonline实战12, 课程评论,相关课程推荐,课程视频页
对应github地址:第12天 一. 课程评论 1. 创建URL, VIEW courses/views.py -> Course
- 爬虫实战1:使用requests和正则爬取电影信息
代码如下 # coding=utf-8 import requests from requests.exceptions import RequestException import re impor ...
- isUserAMonkey? android真逗
QA报了个问题,说是无线热点下面的开关都没了,看了看代码,原来这是android的保护机制. 在涉及到用户信息的功能上,android会通过ActivityManagerNative.isUserAM ...
- c++之随堂笔记
1.指针篇 给指针赋值时,只能等号右边只能使用&符号将一个对象的地址赋值给指针,不能直接把一个具体的数或者字符串直接赋值给指针. 举例: int* ptr_num = 100; //这种写法 ...
- XMPPFramework核心类介绍
XMPPFramework结构 在进入下一步之前,先给大家讲讲XMPPFramework的目录结构,以便新手们更容易读懂文章.我们来看看下图: 虽然这里有很多个目录,但是我们在开发中基本只关心Core ...
- vim中常用的命令
1.光标的命令 gg 移到第一行位置 G 移到最后一行 o 行首 $ 行末 nk 向上移动n行 nj 向下移动n行 nh 向左移动n列 nl 向右移动n列 ctrl+f ...
- RDD转换成为DataFrame
方式一: 通过case class创建DataFrames(反射) TestDataFrame1.scala package com.bky // 隐式类的导入 // 定义case class,相当于 ...