Mybatis从入门到放弃

一,

Mybatis把jdbc进行封装,但是连接数据库的配置和操作数据库的sql语句没办法也不能封装,而这两部分是写在配置文件中mybatis.xml和classnameMapper.xml。

二,环境搭建:

1.导入mybatis-3.2.7.jar官方包,mybatis的依赖包,对mysql的jdbc包,jsp依赖的包jstl和standard, 日志包,等,。

2.在 src 下新建全局配置.xml文件(编写 JDBC 四个变量),

  2.1在全局配置文件中引入 DTD 或 schema,作用是用于检查xml的语法,(是xml语法检查器)从第二行开始写起:

<!DOCTYPE configuration
  			PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  	"http://mybatis.org/dtd/mybatis-3-config.dtd">

上面  <!DOCTYPE configuration...中这个DOCTYPE后面红色的,在DOCTYPE标签之后第一个标签就必须是红色这个,比如

2.2配置数据库连接,

这四个datasource的property是mybatis用于连接数据库的变量,name是不能乱动的,value只有链接端口3306后面的数据库名,数据库账户和密码可以改

2.3在com.demo.pojo包下创建实体类People,并生成get/set方法

package com.dome.pojo;
public class People {

	private int uid;
	private String uname;
	private int age;
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

3.新建一个com.dome.mapper,并建立一个ClassNameMapper.xml文件,一定要写在包里

换句话说:新建以 mapper 结尾的包,在包下新建:实体类名+mapper.xml  例如:PeopleMpper.xml

文件作用:编写需要执行的 SQL 命令,

并且在同一个文件夹中建立一个ClassNameMapper.java的接口文件,接口方法为xml文件标签中配置的id,,

如下代码写一个查询语句:

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace理解成原先用jdbc连接数据的DAO的实现类的全路径(包名+类名)   -->
  <mapper namespace="com.dome.mapper.PeopleMapper">
   <!-- 这里面的每一种标签对应sql的一种操作方法 -->
   <!-- id:原先dao类中的一个方法名 
		parameterType:定义参数类型 ,其实就是 sql语句的参数
		resultType:这个方法的返回值类型.
		
		如果方法返回值是list,在resultType中写List的泛型,因为mybatis
		对jdbc封装,一行一行读取数据,
		读的一行就是一个People的实体类的数据,
		所以要写这个实体类的全路径比如com.dome.pojo.People
	-->
   <select id="selAll" resultType="com.dome.pojo.People">
   	select * from people
   </select>
  </mapper>

4.再把mybatis.xml和PeopleMapper.xml关联起来,要在mybatis.xml的</environments>和</configuration>标签之间写上

<mappers>
		<mapper resource="com/dome/mapper/PeopleMapper.xml"/>
        <!--resource写的是PeopleMapper.xml文件的全路径的目录结构用斜杠-->
</mappers>

5。配置完的两个文件:

mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- default引用environment的id,当前所使用的环境 -->
	<environments default="default">
		<!-- 声明可以使用的环境 -->
		<environment id="default">
			<!-- 使用原生JDBC事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url"  value="jdbc:mysql://localhost:3306/test"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com/dome/mapper/PeopleMapper.xml"/>
	</mappers>
</configuration>

PeopleMapper.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namesapce:理解成实现类的全路径(包名+类名)  
     在测试代码中通过a.b.selAll找到那个sql语句 -->
<mapper namespace="com.dome.peoplemapper" > 
	<!-- id:方法名 
		parameterType:定义参数类型
		resultType:返回值类型.
		如果方法返回值是list,在resultType中写List的泛型,因为mybatis
		对jdbc封装,一行一行读取数据
         为啥没写成集合是因为jdbc是一行一行读数据

	-->
	<select id="selAll" resultType="com.demo.pojo.People">
		select * from people
	</select>
</mapper>

三,环境搭建详解补充

在全局配置文件中内容

1 <transactionManager/> type 属性可取值

1.1 JDBC,事务管理使用 JDBC 原生事务管理方式

1.2 MANAGED 把事务管理转交给其他容器比如说spring.其实就相当于把原生 JDBC 事务

setAutoMapping(false);设置为不自动连接和回滚。

 

2<dataSouce/>type 属性

2.1 POOLED 使用数据库连接池(连接池作用提高系统运行效率)

2.2 UNPOOLED 不实用数据库连接池,和直接使用 JDBC 一样

2.3 JNDI :java 命名目录接口技术. (一般用于用java语言调用其他语言写的资源)

四:在com.dome.service包中创建service的接口:

1.接口方法

package com.dome.service;
import java.io.IOException;
import java.util.List;
import com.dome.pojo.People;
public interface PeopleService {
	List<People> selAll() throws IOException;

}

2.在com.dome.service.impl包实现接口的方法

package com.dome.service.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.dome.pojo.People;
import com.dome.service.PeopleService;

public class PeopleServiceImpl implements PeopleService{
	@Override///接口和实现类必须同时抛出异常
	public List<People> selAll() throws IOException {
		///加载配置文件	
		InputStream is = Resources.getResourceAsStream("mybatis.xml");
		//前面是工厂                                                                      实例化工厂对象时使用的是  构建者设计模式   名称标志:后面有Builder
		/*SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		///		整个sqlsession就是mybatis的所有api封装的对象,包括增删改查	 		
		SqlSession session = factory.openSession();
		 */
		
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		SqlSession session = factory.openSession();
		List<People> list =     session.selectList("com.dome.mapper.PeopleMapper.selAll");
	上面这个com.dome.mapper.PeopleMapper是PeopleMapper.xml文件中的mapper的name      随便取啥都可以,也可以取a.b,只有这里写的和配置文件中相同就行,调用这个name中具体的那个sql,用.id来取
							
		session.close();
		return list;
	}
}

五、建立一个servlet

package com.dome.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dome.pojo.People;
import com.dome.service.PeopleService;
import com.dome.service.impl.PeopleServiceImpl;
//大部分注解都有默认属性,如果注解中只给默认属性复制,可以省略属性名
//否则在注解的(属性名=属性值)格式
//如果一个属性是数组类型格式: 属性名={值,值} ,如果该数组只有一个值,可以省略大括号
//如果类是不是基本数据类型或String而是一个类类型,语法: 属性名=@类型
//注解中@表示引用注解声明
@WebServlet("/show")
public class ShowServlet extends HttpServlet {
	private PeopleService ps =new PeopleServiceImpl();
	public void service(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException{
		List<People> list=ps.selAll();
		req.setAttribute("list", list);
		//相对路径
		//只要路径中以/开头的都叫做全路径. 从项目根目录(WebContent)出发找到其他资源的过程
		//只要不以/开头都是相对路径,相对路径是从当前资源出发找到其他资源的过程
		//如果请求转发 / 表示WebContent目录
		//如果是重定向,静态资源引用,比如<img src=""/> <a href="">  <script src=""/> css引用时
		//其中 /都表示的是tomcat的webapps文件夹根目录并不是项目下的根目录。服务器根目录
		/// WebContent打包给服务器的时候重命名为项目名,
		//如果非要找项目下的静态资源,,所以在调用香米资源的时候加一个    项目名/资源路径,即可
		req.getRequestDispatcher("/index.jsp").forward(req, res);
	}
}

六,在webcontent下建立一个index.jsp视图文件;

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border='1'>
	<tr>
		<th>编号</th>
		<th>姓名</th>
		<th>年龄</th>
	</tr>
	<c:forEach items="${list }" var="peo">
		<tr>
			<td>${peo.uid }</td>
			<td>${peo.uname }</td>
			<td>${peo.age }</td>
		</tr>
	</c:forEach>
</table>
</body>
</html>

七,右键点击项目名,run as->run on server,在浏览器请求栏输入请求的url

 

刚入门请多多指教。

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值