第一篇:Mybatis总结
Mybatis总结
1.mybatis的简单概述: 1.1 mybatis简单概述:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1.2 功能架构: 分为三层:
(1).API接口层:定义api接口,外部人员通过这个接口来调用方法从而操纵数据库。
(2).数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理
等。它主要的目的是根据调用的请求完成一次数据库操作。
(3).基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓
存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数 据处理层提供最基础的支撑。
2.mybatis快速入门: a.添加jar包:
mybatis
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
log4j-1.2.16.jar
mybatis-3.1.1.jar
slf4j-api-1.6.2.jar
slf4j-log4j12-1.6.2.jar
mysql驱动
mysql-connector-java-5.1.7-bin.jar
b.建库+表:
create database mybatis;
use mybatis;CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO users(NAME, age)VALUES('Tom', 12);
INSERT INTO users(NAME, age)VALUES('Jack', 11);
c.在应用的src下添加Mybatis的配置文件conf.xml:
d.定义表所对应的实体类:
public class User {
private int id;
private String name;
private int age;
}
e.定义操作users表的sql映射文件userMapper.xml:
select * from Blog where id = #{id}
f.在conf.xml文件中注册userMapper.xml文件:
g.编写测试代码:执行定义的select语句:
public class Test {
public static void main(String[] args)throws IOException {
String resource = “conf.xml”;
//加载mybatis的配置文件(它也加载关联的映射文件)
Reader reader = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
//映射sql的标识字符串
String statement = “net.lamp.java.mybatis.bean.userMapper”+“.selectUser”;
//执行查询返回一个唯一user对象的sql
User user = session.selectOne(statement, 1);
System.out.println(user);
}
}
3.编写基于mybatis的操作users表的CRUD操作的dao类: a.XML的实现:
1.定义sql映射xml文件:
insert into users(name, age)values(#{name}, #{age});
delete from users where id=#{id}
update users set name=#{name},age=#{age} where id=#{id}
select * from users where id=#{id}
select * from users
2.在config.xml中注册这个映射文件
3.在dao中调用:
public User getUserById(int id){
SqlSession session = sessionFactory.openSession();
User user = session.selectOne(URI+“.selectUser”, id);
return user;
} b.注解的实现:
1.定义sql映射的接口
public interface UserMapper {
@Insert(“insert into users(name, age)values(#{name}, #{age})”)
public int insertUser(User user);
@Delete(“delete from users where id=#{id}”)
public int deleteUserById(int id);
@Update(“update users set name=#{name},age=#{age} where id=#{id}”)
public int updateUser(User user);
@Select(“select * from users where id=#{id}”)
public User getUserById(int id);
@Select(“select * from users”)
public List
}
2.在config中注册这个映射接口
3.在dao类中调用
public User getUserById(int id){
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(id);
return user;
}
4.几个可以优化的地方: a.连接数据库的几个配置可以单独放在一个properties文件中
db.properties:
b.为实体类定义别名,简化sql映射xml文件中的引用
c.可以在src下加入log4j的配置文件,打印日志信息(主要是sql语句)
1.log4j.properties
log4j.properties,log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c]-%m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
5.解决表的字段名与实体类的属性名不相同的冲突: a.准备表和数据:
CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VARCHAR(20),order_price FLOAT);
INSERT INTO orders(order_no, order_price)VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price)VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price)VALUES('cccc', 22);
b.定义实体类:
public class Order {
private int id;
private String orderNo;
private float price;
}
c.实现getOrderById(id)的查询
定义
select * from orders where order_id=#{id}
6.实现联表查询: 1).一对一:
a.创建表和数据:
CREATE TABLE teacher(t_id INT PRIMARY KEY AUTO_INCREMENT,t_name VARCHAR(20));
CREATE TABLE class(c_id INT PRIMARY KEY AUTO_INCREMENT,c_name VARCHAR(20),teacher_id INT);
ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY(teacher_id)REFERENCES teacher(t_id);
INSERT INTO teacher(t_name)VALUES('LS1');
INSERT INTO teacher(t_name)VALUES('LS2');
INSERT INTO class(c_name, teacher_id)VALUES('bj_a', 1);
INSERT INTO class(c_name, teacher_id)VALUES('bj_b', 2);
b.定义实体类:
public class Teacher {
private int id;
private String name;
}
public class Classes {
private int id;
private String name;
private Teacher teacher;
}
c.定义sql映射文件ClassMapper.xml:
select t_id id, t_name name from teacher where t_id=#{id}
2)一对多
a.创建表和数据:
CREATE TABLE student(s_id INT PRIMARY KEY AUTO_INCREMENT,s_name VARCHAR(20),class_id INT);
INSERT INTO student(s_name, class_id)VALUES('xs_B', 1);
INSERT INTO student(s_name, class_id)VALUES('xs_D', 1);
INSERT INTO student(s_name, class_id)VALUES('xs_E', 1);
INSERT INTO student(s_name, class_id)VALUES('xs_A', 2);
INSERT INTO student(s_name, class_id)VALUES('xs_H', 2);
INSERT INTO student(s_name, class_id)VALUES('xs_J', 2);
b.定义实体类:
public class Student {
private int id;
private String name;
}
public class Classes {
private int id;
private String name;
private Teacher teacher;
private List
}
c.定义sql映射文件ClassMapper.xml:(根据classId查询对应的班级信息,包括学生)
select * from class c,teacher t, student s where c.c_id=#{id} and c.teacher_id=t.t_id and s.class_id=c.c_id
select * from class c where c.c_id=#{id}
select t_id id, t_name name from teacher where t_id=#{id}
select s_id id, s_name name from student where class_id=#{id}
第二篇:MyBatis教程(一)(范文)
MyBatis教程(一)
1、简介、获取
官方网站:http://code.google.com/p/mybatis/
目前最新版本:mybatis-3.1.1-bundle.zip
MyBatis是一个优秀的持久层(数据访问层)框架。
MyBatis主要用来执行SQL命令或者存储过程。
MyBatis能将SQL语句与Java对象之间进行一种映射。
例如:
数据库:select * from UserInfo 表、字段
JAVA: public class UserInfo{ 类、属性
int id;
String username;
String password;
}
JDBC代码中,常常:
user.setId(rs.getInt(1)); 我们必须自己来管理字段和属性之间的对
应关系。
MyBatis中,可能是:
UserInfo user = session.selectOne(“dao.UserInfoDAO.selectById”, 1);
List
2、入门示例
a)、将mybatis-3.1.1.jar添加到构建路径。
b)、在src下建立一个MyBatis的配置文件,名叫:mybatis.xml,配置文件中需要配置 数据库连接的驱动类,连接字符串,用户名 和 密码。
c)、在demo01.TestSqlSessionFactory类中编写代码。
d)、数据库中建立一张表:UserInfo,建立实体类 demo02.UserInfo e)、创建UserInfo.xml文件,其中配置查询语句。
f)、在 demo02.TestSqlSession类中编写代码,调用UserInfo的查询,输出结果。
3、配置MyEclipse下MyBatis的自动提示功能
1、将MyBatis两种配置文件的DTD文件从网上下载下来,拷贝到我们的项目中。DTD —— Document Type Define —— 文档类型定义
DTD文件可以决定我们的XML中能写哪些标签,标签的嵌套顺序,以及标签有哪 些属性。
2、MyEclipse Window Preferences 输入 xml,找到 XML Catalog,点击 User Specified Entries,点击 AddKey Type下拉,选择 URIKey:http://mybatis.org/dtd/mybatis-3-config.dtdLocation: Workspace下选择我们对应的DTD文件。
3、简单的增、删、改、查实现
id
resultType & resultMap 控制结果的类型 和 映射
parameterType& parameterMap参数类型 和 映射
第三篇:MyBatis的foreach语句详解
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可
以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key
下面分别来看看上述三种情况的示例代码:
1.单参数List的类型:
select * from t_blog where id in
#{item}
上述collection的值为list,对应的Mapper是这样的public List
测试代码:
@Test
public void dynamicForeachTest(){
SqlSession session = Util.getSqlSessionFactory().openSession();BlogMapper blogMapper = session.getMapper(BlogMapper.class);List
ids.add(1);
ids.add(3);
ids.add(6);
List
for(Blog blog : blogs)
System.out.println(blog);
session.close();
}
2.单参数array数组的类型:
select * from t_blog where id in
#{item}
上述collection为array,对应的Mapper代码:
public List
对应的测试代码:
@Test
public void dynamicForeach2Test(){
SqlSession session = Util.getSqlSessionFactory().openSession();BlogMapper blogMapper = session.getMapper(BlogMapper.class);int[] ids = new int[] {1,3,6,9};
List
System.out.println(blog);
session.close();
}
3.自己把参数封装成Map的类型
select * from t_blog where title like “%”#{title}“%” and id in
#{item}
上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:public List
@Test
public void dynamicForeach3Test(){
SqlSession session = Util.getSqlSessionFactory().openSession();BlogMapper blogMapper = session.getMapper(BlogMapper.class);final List
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(6);
ids.add(7);
ids.add(9);
Map
params.put(“title”, “中国”);
List
System.out.println(blog);
session.close();
}
第四篇:黑马程序员mybatis教程第一天:课程安排和原生态jdbc程序中问题总结
课程安排:
mybatis和springmvc通过订单商品 案例驱动
第一天:基础知识(重点,内容量多)
对原生态jdbc程序(单独使用jdbc开发)问题总结
mybatis框架原理(掌握)
mybatis入门程序
用户的增、删、改、查
mybatis开发dao两种方法:
原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握)
mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)
mybatis配置文件SqlMapConfig.xml mybatis核心:
mybatis输入映射(掌握)
mybatis输出映射(掌握)
mybatis的动态sql(掌握)
第二天:高级知识
订单商品数据模型分析
高级结果集映射(一对一、一对多、多对多)
mybatis延迟加载
mybatis查询缓存(一级缓存、二级缓存)
mybaits和spring进行整合(掌握)
mybatis逆向工程
对原生态jdbc程序中问题总结
环境
java环境:jdk1.7.0_72 eclipse:indigo mysql:5.1
创建mysql数据
导入下边的脚本:
sql_table.sql:记录表结构
sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本
jdbc程序
使用jdbc查询mysql数据库中用户表的记录。
创建java工程,加入jar包:
数据库驱动包(mysql5.1)
上边的是mysql驱动。下边的是oracle的驱动。
程序代码:
问题总结
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
第五篇:总结
1994年9月,我以满腔的热情、满怀的信心投身于教育事业。1999年12月,我获得了小学一级教师资格。任现职以来,我主要是担任班主任和高年级数学教学,工作一丝不苟,热心支持学校所开展的各项工作和活动,出色地完成了学校交给的任务。现将任职以来的思想及工作情况总结如下:
一、思想表现方面:
本人始终坚持把坚定正确的政治方向放在首位,高举邓小平理论伟大旗帜,深入学习邓小平理论及“三个代表”的重要思想,全面贯彻党的教育方针,忠诚于党的教育事业,工作积极主动,勇挑重担,认真履行岗位职责,有极强的事业心和责任感。遵纪守法,遵守社会公德,严格自律,努力提高自己的政治素质,坚持专业知识的学习,积极参加进修、培训、教研活动,真心地对待每一位老师和学生。用自己的言行及人格魅力赢得了广大师生的尊重和信任。
二、教育教学工作:
1、班主任工作方面:长期以来,我一直把“勤奋努力,奉献爱心”作为班主任的原则,所以我能够坚持正面教育,大胆从心理素质方面探索德育教育的触发点,关心爱护学生,言传身教。我尊重学生的人格,不歧视差生,注意做好后进生的转化工作,对一些思想上不够成熟、自律性差、孤僻自卑或狂妄等缺点的学生,我进行了细致的了解,从生活、学习等方面关心他们,让他们觉得我既是一个值得尊敬的老师,又是一个可以与他们谈心的朋友。在转化后进生、扭转班级学风上我做出了突出的成绩,德育工作得到大多数领导和老师们的肯定。在2001年秋季学期,转化了四(2)班的毛善思、黄福绿等5位问题学生。、2006年在春季学期,转化了三(2)班吴宏达、朱家南、陆文乐、卓福添、杨秀珍、潘昆等6位后进生,秋季学期所带六(2)班班风好,学习气氛浓厚,纪律、成绩优秀.2008年5月12日四川发生了里氏8.0大地震,我所在学校和班里都积极捐款,我用实际爱心赢得学生的信赖,所带的六(1)班为灾区总共捐了562.8元。2008年秋季学期转变陆文格、覃宗相、潘启发、丁承宇等4位问题学生。
2、教学工作方面:任现职以来,我主要是担任数学科教学工作。在具体教学活动中,我积极思考,勇于探索,锐意进取,改进教法,钻研教材、大纲、考纲以及新课程标准,善于创造情境,营造轻松、民主的课堂氛围,逐渐形成了自己的教学风格,在评教活动中获得了很高的评价,所带班级学科教学质量效果较为明显。在任现职期间,我担任过的七届毕业班数学教学,学生参加毕业水平调研,平均分均达到90分以上,达标率均达100%。如2003年、2006年、2008年秋季学期期末教学质量检测中所教六(2)班、六(1)班、六(1)─ 4 ─
任现职以来专业技术工作总结 班,这三个班的平均分分别获得当年同年级同科目一等奖、二等奖、一等奖。2005年所教的六(2)班学生在春季学期参加来宾市数学竞赛中,黄子宾、杨可秀、卓秋华分别获得一、二、三等奖,我也获得指导奖;在春季学期毕业水平测试中所教数学科平均分获镇本年级本科目三等奖。2005年秋季学期所指导三(2)班学生在参加广西小学数学应用知识竞赛中取得了较好的成绩,其中陈钟子圆获一等奖,韦慧岚、谭道振等六位同学获二等奖,黎燕、谭莉莉等三位同学获三等奖,我因此也获得自治区级竞赛指导一等奖。2009年,我获兴宾区小学毕业水平调研数学科成绩优胜奖,所教六(1)班数学科平均分获镇同年级同科目二等奖,秋季学期镇举行的公开课比赛获二等奖。
3、少先队辅导员工作:在担任学校少先队辅导员其间,除做好本职工作的之外,我还积极协助学校做好各项工作,每学期均组织团队开展丰富多彩的活动:植树造林美化校园,增强学生环保意识;清明节祭扫烈士墓,让学生激发爱国情怀;“六一”儿童节开展联欢活动,让他们度过难忘的节日。同时,还经常组织学生到敬老院慰问老人,开展人人都为国家贡献一份力量,争当时代好少年的活动。由于出色地完成工作,我被评为2000柳州地区优秀少先队辅导员,考核为优秀等级。
三、传帮互补,关心教师,共同进步:
“一枝独秀不是春,万紫千红春满园”,青年教师有新思想,知识丰富,个性张扬,为学校发展注放了一股清新的泉水,让他们在教学的舞台上发挥自己的才能,是学校希望所在。在提高自身教学水平的同时,我认真参加备课组活动,积极承担培训青年教师的工作。在任现职期间,我每学年都承担在校内上公开课、研究课的任务,积极扶持青年教师的成长。经我悉心指导的黄锦秋、韦飞龙、覃爱芬成了校级学科骨干教师,秦丽、何基浪成了优秀班主任。
四、其他方面:
在搞好本职工作的同时,我积极参加各种继续教育培训活动,完成了专科函授课程的学习,现继续本科函授的学习。在繁忙的教学之余,笔耕不辍,我撰写了一些有创新意识的教研、教改论文。曾有教学论文《如何上好每一节课》、《应如何适应新时代的要求》等在学校教师例会上交流,效果良好;撰写的教育教学论文《浅谈小学数学新课程教学的优化策略》在2008年广西中小学(幼儿园)教育教学论文评比中获三等奖,2009年所撰写的论文《数学新课程教学改革之我见》在中国教育教学全国评选活动中获二等奖。2010年3月25日,我代表中心校的数学骨干教师到来宾市祥和小学进行“数学本质下的读懂教材和落实‘四基’”主题培训,4月25日对全中心校数学教师进行集中培训。
总之,任现职以来,我忠诚于党的教育事业,兢兢业业,以身作则,为人师表,做到既教书又育人。虽然在平凡的工作岗位,但我决心在以后的教学中,更加努力,为党的教育事业作出更多的贡献,成为一名优秀出色的人民教师。