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 ...
随机推荐
- ASP.NET Core使用Ping判断网络是否接通
static void Main(string[] args) { // 主机地址 string targetHost = "bing.com"; string data = &q ...
- “全栈2019”113篇Java基础学习资料及总结
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- ROS(机器视觉)
通过ROS打开摄像头 查看话题信息和消息 图像数据: 默认调用笔记本自带摄像头,如需调用外接摄像头,需要将其中video0改成video1.
- Elasticsearch(八)【NEST高级客户端--分析器】
分析 分析是将文本(如任何电子邮件的正文)转换为添加到反向索引中进行搜索的tokens或terms的过程. 分析由analyzer执行,分析器可以是内置分析器或每个索引定义的定制分析器. 书写分析器测 ...
- [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:Tree作为PopUpButton ...
- PDF转HTML的方法。
上个项目客户提出了一个需求,要求把PDF格式的文件转化为HTML格式. 上网查了一下,要么使用软件处理,要么是HTML格式转化为PDF.因为涉及到图文识别问题,所以说仅仅依靠前端不能实现.在网上查了几 ...
- 关于iframe切换的问题
定位不到元素的另一种问题是有这种iframe,所有我们需要切换到该页面中去 1.首先找到这个iframe的位置,像上图有id属性我们直接 iframe = driver.find_element_b ...
- Protobuf底层存储原理
参考官网, 序列化原理 底层二进制存储 message Test1 { optional int32 a = 1; } 并设置为a=150,序列化到一个文件中,查看文件,得到下面的二进制: 08 96 ...
- 对称矩阵与压缩存储算法(java实现)
package 数组和矩阵; public class DuiChenJuZhenYaSuo { int[] arr; int order; //矩阵的阶数 int n; //压缩后一位数组的个数 p ...
- QuantLib 金融计算——随机过程之一般 Black Scholes 过程
目录 QuantLib 金融计算--随机过程之一般 Black Scholes 过程 一般 Black Scholes 过程 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib ...