1.为什么使用mybatis?
Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装使开发者只需要关注SQL本身。
一,想要使用mybatis,先要添加mybatis 、 mysql-connector-java 引用:
<!--mybatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> <scope>runtime</scope> </dependency>
二,编写mybatis-config.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> <settings> <!--配置控制台输出mybatis执行的sql语句--> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--MyBatis连接数据的配置--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!--采用jdbc的方式连接数据库--> <dataSource type="POOLED"> <!--mybatis启用数据库连接池--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!--数据库连接驱动--> <property name="url" value="jdbc:mysql://localhost:3306/——数据库名称——?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8"/> <!--数据的url地址--> <property name="username" value=""/> <!--数据库的用户名--> <property name="password" value=""/> <!--数据库密码--> </dataSource> </environment> </environments> <!--加载Mabatis的映射文件--> <mappers> <mapper resource="mapper/UserMapper.xml"/><!--xml的路径要与类的路径一致--> </mappers> </configuration>
三,编写mapper接口:
public interface UserMapper { //接口方法,不需要我们实现 User getUserById(User user); }
四,编写Mabatis的映射文件:
<?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="navMapper":Mapper文件名称空间 --> <mapper namespace="com.example.mybatis.mapper.UserMapper"> <select id="getUserById" parameterType="int" resultType="com.example.mybatis.model.Usermodel"> select * from user where id = #{id} </select> </mapper>
注意: namespace的路径是mapper的全路径,id对应的是UserMapper接口下的方法名称,
parameterType:接口中方法参数的类型, 类型的完全限定名或别名,
resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等。
五,开始使用(单列模式,只有一个MybatisUtil实列):
public class MybatisUtil { public static SqlSession sqlSession=null; public static SqlSessionFactory sqlSessionFactory=null; protected static InputStream resourceAsStream;//加载mybatais主配制文件 private static MybatisUtil mybatisUtil; private static final ThreadLocal<SqlSession> sessionThreadLocal=new InheritableThreadLocal<>();//本地线程 private MybatisUtil(){}; static { mybatisUtil=new MybatisUtil(); try { / /加载mybatais主配制文件 resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); //创建MyBatais工厂对象 sqlSessionFactory = newSqlSessionFactoryBuilder().build(resourceAsStream); //获得SqlSession的对象时,openSession(true)代表自动开启提交事务服务了 sqlSession=sqlSessionFactory.openSession(true); } catch (IOException e) { e.printStackTrace(); } } public static MybatisUtil getMybatisUtil() { return mybatisUtil; } public SqlSession getSqlSession() { SqlSession sqlSession=sessionThreadLocal.get();//从本地线程获取 if (sqlSession==null){ sqlSession=sqlSessionFactory.openSession(true); sessionThreadLocal.set(sqlSession); } return sessionThreadLocal.get(); } }
六,在业务逻辑层使用: UserMapper userMapper = MybatisUtil.getMybatisUtil().getSqlSession().getMapper(UserMapper.class);
接下来就可以使用userMappe里的方法r实现对数据库的操作了!
如:User user=new User();
user.setId(1);
userMapper.getUserById(user);//可以获取id为1的user了。