三层架构
1.界面层(视图层)一完成和用户的交互 ,接收请求,显示请求的处理结果
2.业务逻辑层一计算数据 ,处理业务逻辑
3.数据访问层(持久层)一数据库操作
Mybatis
作用:增强的jdbc,访问数据库,执行增删改查 <br>
基本步骤
1.加入maven的依赖- <br>
<dependency><br><groupId> org.mybatis </groupId><br><artifactId> mybatis </artifactld><br><version> 3.5.1 </version><br></dependency> <br>
2.创建Dao接口:定义了你操作数据的方法
3.创建mapper文件,也叫做sq|映射文件:写sql语句的,和接口中方法对应的sq|语句
4.创建mybatis的一个主配置文件: 1 )连接数据库; 2 )指定mapper文件的位置
5.使用mybatis的对象SqISession,通过他的方法执行sql语句
1.inputStream in= Resources.getResoursesAsStraem("mybatis.xml主配置文件路径”);
2.SqlsessionFactory factory = SqlsessionFactoryBuilder.build(in);
3.Sqlsession session =factory.openSession( );
4.session.commit( );
5.session.close( );
Mybatis的动态代理
什么动态代理: mybatis帮你创建dao接口的实现类,在实现类中调用SqlSession的方法执行sq|语句 <br>
使用动态代理的方式
1.获取SqISession对象, SqlSessionFactory.openSession<b>(<font color="#c41230">参数默认为false,关闭自动提交</font>)</b>
2.使用getMapper方法获取某个接口的对象,<font color="#f15a23"><b>sqlSession.getMapper(接口.class)</b></font>
3.使用dao接口的方法,调用方法就执行了mapper文件中的sql语句
使用动态代理方式的要求:
1.dao接口和mapper文件放在一 起,同-个目录
2.dao接口和mapper文件名称- 致
3.mapper文件中的namespace的值是dao接口的全限定名称
4.mapper文件中的<select>, <insert>. <update>, <delete>等的id是接口中方法名称
5.dao接口中不要使用重载方法,不要使用同名的,不同参数的方法
参数传递:
1.-个简单类型的参数: #{任意字符}
2.多个简单类型的参数,使用@Param(“自定义名称")
3.使用一个java对象 ,对象的属性值作为mapper文件找到参数,#{java对象的属性名称}
4.使用参数的位置,语法#{arg0}, #{arg1} . mybatis3.4之前的版本,使用的#{0}, #{1}
5.使用Map作为参数,#{map的key}
$和#的区别:
1.#是占位符,表示列值的,放在等号右侧
2.$占位符,表示字符串的连接,把sq|语句连接成- 个字符串
<font color="#c41230"><b>3.#占位符使用的jdbc指定PreparedStatement对象执行SQL语句,效率高,没有sq|注入的风险</b></font>
<font color="#c41230"><b>4.$使用的是Statement对象执行sql,效率低,有sq|注入的风险</b></font>
Mybatis返回结果:
resultType
表 示sq|语句的执行结果,转为java对象的类型
1.类型的全限定名称
2.别名
在mybatis主配置文件定义别名 <typeAliases>
1.使用 <typeAlias>
<font color="#c41230"><typeAlias type</font>="com.bjpowernode.vo.ViewStudent" <font color="#c41230">alias</font>="别名" />
2.使用<package name=“包名" /> : 类名就是别名
resultMap
自定义列名和java对象的属性名对应关系
<resultMap id="id的值,唯一标识" type="com.bjpowernode.domain.MyStudent"><br><br><b><font color="#c41230"> <!--主键列,使用id。 culumn为数据库的列名,property为java实体类的属性名</font></b>--><br><br> <id column="id" property="stuid" /><br><br><b><font color="#c41230"> <!--非主键列,使用result--></font></b><br><br> <<font color="#c41230">result</font> <font color="#c41230">column</font>="name" <font color="#c41230">property</font>="stuname" /><br><br><result column="age" property="stuage" /><br><br> </resultMap>
列名和属性名不一样解决方式
1.使用列别名
select id <font color="#c41230">as</font> stuid
2.使用resultMap
like
1.在java代码中指定like的内容
where name like #{name}
2.在mapper中拼接like
where name like "%" #{name} "%"
动态SQL
根据条件,能够得到不同的sqi语句,使用mybatis的标签,例如if , where,foreach等
if:判断条件的,条件为true ,就会把if之间的sq|加入到主sq|之后
where : <where>标签里面是多个if,如果有一个if判断为true,会在sql的后面加入where关键字,会去掉无用的and,or等字符
foreach :循环数组,list集合。
<foreach collection="" item="" open=””close=””separator=”><br>#({xxx}<br></foreach><br><br>collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用list<br>item:自定义的,表示数组和集合成员的变量<br>open:循环开始是的字符<br>close:循环结束时的字符<br>separator:集合成员之间的分隔符 <br>
sq|代码片段:复用部分sqi语句的
1.先定义<sql id="自定义名称唯一"> sql语句,表名,字段等</sq|>
2.再使用,<include refid= "id的值" />
Mybatis主配置文件
数据库配置文件的使用
1 )在resources目录中定义一个属性配置文件 ,xxx.properties ,例如jdbc.properties,在属性配置文件中,定义数据,格式是key=value,key -般使用.做多级目录的
<b><font color="#c41230">2)在mybatis的主配置文件,使用<propertites resource="">指定文件的位置在需要使用值的地方,${key}</font></b>
mapper文件的位置
第一种方式:指定多个mapper文件<br> <!--<mapper resource="com/bjpowernode/dao/StudentDao.xml"/><br> <mapper resource="com/bjpowernode/dao/OrderDao.xml" />--><br><br>第二种方式: <!--使用包名<br>name: xml文件( mapper文件)所在的包名,这个包中所有xml文件-次都能加载给mybatis<br>使用package的要求: 1. mapper文件名称需要和接口名称-样,区分大小写的- -样<br>2. mapper文件和dao接口需要在同一目录<br>-- ><br><package name="com.bjpowernode.dao"/> <br>
pageHelper
功能:实现多种数据库的分页, mysql就是代替limit语句的 <br>
使用步骤:
1.加入Maven依赖:
<dependency><br><br><groupId> com.github.pagehelper</groupld><br><br><artifactld> pagehelper</artifactId><br><br><version> 5.1.10</version><br><br></dependency> <br>
<b><font color="#c41230">2.在mybatis主配置文件,加入plugin </font></b><br>
< plugins><br><br><plugin interceptor= "com.github.pagehelper.PageInterceptor" /> <br><br></plugins> <br>
3.在你的查询方法之前,加入PageHelper方法调用 <br>
<b><font color="#c41230">PageHelper.startPage(1,3);<br>List<Student> students = dao.selectAll0; </font></b><br>