mybatis的基本配置:实体类、配置文件、映射文件、工具类 、mapper接口
搭建项目
一:lib(关于框架的jar包和数据库驱动的jar包)
1,第一步:先把mybatis的核心类库放进lib里
2,第二步:导入第三方类库(在lib里)。mybatis的核心类库在运行时还依赖一些第三方类库
3,第三步:导入连接数据库驱动jar包
二:创建mybatis的配置文件
1,第一步:先创建实体包,对照着表结构把实体类写出来。封装好就是写get,set方法------不像hibernate,可以自动的将表名字段名与实体类相对应,不用自己手写实体类与映射文件
2,第二步:创建xml文件,文件名可以随便写,这里参考hibernate的规范写法:mybatis.cfg.xml
不需要next,因为myeclipse没有内置mybatis的文档声明
3,配置文件由四部分组成:
(1)配置日志
(2)配置类型别名
把经常要用到的类设置别名,后面就可以使用别名,可简化代码---自定义实体类设置别名
(3)配置数据库连接和事务管理器
(4)导入映射文件
完整的配置文件如下:
<?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> <!-- 设置mtbatis的一些运行参数:日志,是直接输出到控制台上还是输出到log4j文件中 --> <settings> <!-- name不可以随便写,只能叫这个名字;value有好几个选项这里选择向控制台输出 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--设置类型别名:在执行sql语句的时候,如果不设置别名。每次在指定的时候都需要包名+类名,得写的长 --> <typeAliases> <!-- type就是完整实体类名, --> <tapeAlias type="cn.bdqn.mybatis.entity.User" alias="User"/> </typeAliases> <!--数据库连接的属性,不同的开发阶段连接不同的数据库 开发阶段——开发环境:连接程序员自己的数据库 测试阶段——测试环境:连接测试数据库 上线运行——生产环境:连接正式数据库 里边可以写多个environment --> <environments default="dev"> <!-- 开发环境 --> <environment id="dev"> <!-- 通过JDBC管理事务 --> <transactionManager type="JDBC"/> <!--不使用连接池 --> <dataSource type="UNPOOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306:Test"/> <property name="username" value="test"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--sql映射文件的路径--> <mappers> <!-- 引入要加载的sql文件 --> <mapper resource="cn/bdqn/mybatis/mapper/User.sql.xml"/> </mappers> </configuration>
编写工具类
package cn.bdqn.mybatis.util; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { private static SqlSessionFactory sessionFactory; static{ try { //获得用来加载配置文件的输入流 字符流 Reader reader=Resources.getResourceAsReader("mybatis.cfg.xml"); //构建器,通过它 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); sessionFactory=builder.build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sessionFactory.openSession(true); } }
映射文件
<?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"> <mapper namespace="cn.bdqn.mybatis.mapper.UserMapper"> <insert id="addUser" parameterType="User"> INSERT INTO User(userName,password,email) VALUES (#{userName},#{password},#{email}) </insert> <select id="getUser" resultType="User"> SELECT id,userName,password,email FROM User WHERE id=#{id} </select> <select id="findUser" resultType="User"> SELECT id,userName,password,email FROM User ORDER BY id; </select> <update id="updateUser" parameterType="User"> UPDATE User SET userName=#{userName},password=#{password},email=#{email} WHERE id=#{id} </update> <delete id="delUser" > DELETE FROM User WHERE id=#{id} </delete> </mapper>
mapper接口
package cn.bdqn.mybatis.mapper; import java.util.List; import cn.bdqn.mybatis.entity.User; //通过接口里边的抽象方法来调用对应的语句 //接口对应映射文件----把SQL语句的命名空间设置成接口的完整类名 //相当于原来dao层,我只需要定义dao接口,那具体的实现类现在不用咱自己写了,只需拿到mapper接口类即可 省了很多事,提高开发效率 public interface UserMapper { public int addUser(User user); public User getUser(Integer id); public List<User> findUser(); public int updateUser(User user); public void delUser(Integer id); }
测试类
第一种调用sql语句的方法
//保存一个用户
int rows=session.insert("User.addUser",user); //根据id获取一个用户 user=session.selectOne("User.getUser",2);
第二种最常用的调用sql语句的方法:定义一个mapper接口 mapper接口中,返回值类型,参数,得相对应;方法名与sql语句id相一致
//先告诉session;后session根据mapper的class找到了命名空间
UserMapper mapper=session.getMapper(UserMapper.class);
int rows=mapper.addUser(user);