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 ...
随机推荐
- 「SDOI2008」洞穴勘测
题目链接 戳我 \(Solution\) \(LCT\)裸题 \(Connect\)操作,执行\(link(u,v)\) \(Destroy\)操作,执行\(cut(u,v)\) \(Query\)操 ...
- django系列3.3--CBV 和 FBV
一.CBV和FBV FBV function base views 用函数方法来处理请求 from django.http import HttpResponse def my_view(reques ...
- java中二维数组遍历
public class Demoshuzu2 { public static void main(String[] args) { int[][] arr2 = {{78,79,65, ...
- 引入阿里的druid
Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. Druid支持所有JDBC兼容的数据库,包括 ...
- 设置跨交换机VLAN
4台计算机,pc1 pc2 连接到交换机1的f1/1和f1/2.Pc3 pc4 连接到交换机2的f1/1和f1/2.pc1设置ip地址192.168.1.10,pc2 pc3 pc4设置ip地址192 ...
- jdk完全卸载(亲测jdk1.7.0_80在win7)
1.从控制面板里删除java程序 2.删除注册表:HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ 3.删除C:\Windows\System32 和 C:\Windows\ ...
- 官宣,PyTorch 1.0 稳定版本现已推出
简评:快来一起快乐地学习吧. 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版.研究 ...
- 解决Python向MySQL数据库插入中文数据时出现乱码
解决Python向MySQL数据库插入中文数据时出现乱码 先在MySQL命令行中输入如下语句查看结果: 只要character_set_client character_set_database ch ...
- 2016级算法期末上机-G.中等·Bamboo's Fight with DDLs II
中等·Bamboo's Fight with DDLs II 分析 一句话:给定字符串,求最长回文子序列长度,动态规划LCS思想的进阶应用 具体思路如下: 对于任意字符串,如果头尾字符相同,那么字符串 ...
- springcloud应用思考
1 springcloud注册中心eureka和zookeeper注册中心的区别: eureka注册中心,在服务选主的时候服务还是可以用的,zookeeper注册中心在选举的时候整个服务瘫痪了,是不可 ...