作用:对底层的JDBC进行封装
优点:使用 MyBatis 不用编写Dao实现类,只用写sql命令就好
该项目的目录:
mybatis对配置文件的文件名没有要求。
如果导入网络dtd没提示,执行如下操作:导入本地的dtd、xsd文件:
<configuration>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC">transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/people"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
mappers>
configuration>
事务对jdbc进行管理:
事务默认是“自动提交”,通过 conn.setAutoCommit(false); 进行手动提交。
src下的代码全会编译到classes文件夹下,之所以所有代码都往src下放,因为在classes文件下,可以快速通过classpath:快速找到xx文件夹。
create table `user`(
`id` varchar(64) NOT NULL COMMENT 'ID',
`name` varchar(255) NOT NULL COMMENT '姓名',
`age` int NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
public class UserEntity {
private String id; // ID
private String name; // 姓名
private String age; // 年龄
//set、get、toString方法
......
}
文件作用:编写需要执行的SQL命令
反射机制:要书写类的全路径,才能反射到。
在框架的 mybatis.xml 文件中,只要是自己写的类,就要写成全路径
<mapper namespace="a.b" >
<select id="selAll" resultType="com.xxsxt.pojo.User">
select * from user
select>
mapper>
<configuration>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC">transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/people"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
mappers>
configuration>
public class Test {
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("myabtis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//生产SqlSession
SqlSession session=factory.openSession();
List<User> list = session.selectList("a.b.selAll");
for (Useruser: list) {
System.out.println(user.toString());
}
session.close();
}
}
mybatis将数据库表中的列名通过反射找同名属性,就是找实体类中的set( xx ) 方法;这就是mybatis中的重要过程 “自动映射” (autoMapping),通过同名进行自动映射;
mybatis3.2之前找set() 方法;mybatis3.2之后直接找属性。
反射也可以给私有属性赋值。
JDBC:事务管理使用 JDBC 原生事务管理方式
MANAGED: 把事务管理转交给其他容器(Spring容器)。原生 JDBC 事务 setAutoMapping(false);
POOLED: 使用数据库连接池
UNPOOLED: 不实用数据库连接池,和直接使用 JDBC 一样
JNDI:java 命名目录接口技术.(使用java语言调用其他语言写的接口)
使用数据库连接池的目的:在高频率访问数据库时,使用数据库连接池可以降低服务器的系统压力,提升程序的运行效率。
<Context>
<Resource
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/ssm"
username="root"
password="root"
maxActive="50"
maxIdle="20"
name="test"
auth="Container"
maxWait="10000"
type="javax.sql.DataSource"
/>
Context>
2.2 把项目发布到tomcat中,数据库连接池产生了
启动 tomcat 就会生成数据库连接池
@WebServlet("/pool")
public class DemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
try {
Context cxt = new InitialContext();
DataSource ds = (DataSource) cxt.lookup("java:comp/env/test"); //通过全路径获取数据库连接池
Connection conn = ds.getConnection(); //从连接池中获取连接对象
PreparedStatement ps = conn.prepareStatement("select * from flower");
ResultSet rs = ps.executeQuery();
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
while(rs.next()){
out.print(rs.getInt(1)+" "+rs.getString(2)+"
");
}
out.flush();
out.close();
rs.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
tomcat 默认走 Servers 中的配置文件。
源码下载:https://download.csdn.net/my