Cet article vous explique qu'est-ce que Mybatis ? L'introduction du contenu lié à Mybatis a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela vous sera utile.
Introduction à MyBatis
MyBatis était à l'origine un projet open source iBatis d'Apache. En 2010, ce projet est passé de la fondation logicielle Apache au code Google et. renommé MyBatis . Migré vers Github en novembre 2013.
MyBatis est un excellent framework de couche de persistance qui prend en charge le SQL personnalisé, les procédures stockées et le mappage avancé. MyBatis évite presque tout le code JDBC, le réglage manuel des paramètres et la récupération des jeux de résultats. MyBatis peut utiliser du XML simple ou des annotations pour la configuration et des cartes natives pour mapper les interfaces et les POJO Java (Plain Old Java Objects, objets Java ordinaires) dans les enregistrements de la base de données.
Site officiel de référence MyBatis
http://www.mybatis.org/mybatis-3/zh/index.html
Adresse de téléchargement MyBatis
https://github.com/mybatis/mybatis-3
Avantages de MyBatis
Excellent cadre de couche de persistance open source
Séparation des instructions SQL et du code
Programmation orientée configuration
Bonne prise en charge du mappage de données complexe
SQL dynamique
Étapes de développement de MyBatis
2) Pilote de base de données (mysql-connector-java-5.1.22 -bin)
create table `tal_employee` ( `id` int (11), `last_name` varchar (360), `email` varchar (300), `gender` char (9) );
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('1','韩信','hanxin@gemail.com','男'); INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('2','LiBaihH','libai@gemail.com','男'); INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('3','孙尚香','sunshangxiang@gemail.com','女'); INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('4','安琪拉','anqila@gemail.com','女'); INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('5','Hello','Hello@gemail.com','男'); INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('6','Miya','Miya@gemail.com','男');
public class Employee { private Integer id; private String lastName; private String email; private String gender; //此处省略get set toString。。。 }
<?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="EmployeeMapper"> <!-- 定义一个查询方法 resultType 返回值类型--> <select id="findAll" resultType="com.simple.mybatis.entitys.Employee"> select * from tal_employee </select> </mapper>
<?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默认使用环境名字--> <environments default="development"> <!-- 配置一个环境 --> <environment id="development"> <!-- 使用事务JDBC事务管理器 --> <transactionManager type="JDBC" /> <!-- 配置数据库连接 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 加载映射 --> <mappers> <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml" /> </mappers> </configuration>
Récupérez l'objet SqlSessionFactory
private SqlSessionFactory sqlSessionFactory; @Before public void init() throws IOException{ //读取mybatis主配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); /** * 实例化SqlSessionFactory * 如果没有指定默认环境,可以在这里指定使用的环境ID,比如我先在有个DEV环境 * sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"DEV"); * 我这里已经使用了默认环境所以我就不用这种方式创建了 */ sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }
Accédez à la base de données
Récupérez l'objet SqlSession, qui agit sur une conversation avec la base de données. agit sur une conversation avec la base de donnéesSqlSession session = sqlSessionFactory.openSession();
List<Employee> employees = session.selectList("EmployeeMapper.findAll"); for (Employee employee : employees) { System.out.println(employee); }
Employee [id=1, lastName=null, email=hanxin@gemail.com, gender=男] Employee [id=2, lastName=null, email=libai@gemail.com, gender=男] Employee [id=3, lastName=null, email=sunshangxiang@gemail.com, gender=女] Employee [id=4, lastName=null, email=anqila@gemail.com, gender=女] Employee [id=5, lastName=null, email=Hello@gemail.com, gender=男] Employee [id=6, lastName=null, email=Miya@gemail.com, gender=男]
Résoudre le problème selon lequel les champs de table ne correspondent pas aux noms d'attributs de classe
Raison : cela devrait être dû au fait que l'attribut de notre classe d'entité appelé lastName ne correspond pas au nom de la colonne de la base de données last_name, donc on l'obtient La valeur est videSolution 1 : Alias la balise select dans le fichier de mappage de classe d'entité<select id="findAll" resultType="com.simple.mybatis.entitys.Employee"> select id,last_name AS lastName,email,gender from tal_employee </select>
<settings> <!-- 开启驼峰式命名规则 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
Utilisez le journal pour afficher les instructions SQL, etc.
Nous devons d'abord ajouter le package de dépendances mybatisAjouter log4j.properties#设置输出级别和输出位置 log4j.rootLogger=debug,Console #设置控制台相关的参数 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n #设置MyBatis的输出内容 log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
afin que nous puissions utiliser log4j pour afficher nos instructions SQL et nos paramètres entrants. . Attendez
Fichier de configuration MyBatis
标签 | 说明 |
---|---|
配置环境 | |
一些外部属性,这些属性可以被替换 | |
Mybatis中极为重要的调整设置,会改变Mybatis的默认行为。 | |
为Java类型设置一个别名,它只和xml配置有关。 | |
映射器,加载MyBatis的映射文件。 | |
插件,Mybatis允许用户在映射的某一点进行拦截。 |
Balise | Description | < /tr>
---|---|
<🎜> | Environnement de configuration |
Certains attributs externes, ces attributs peuvent être remplacés | |
<🎜> | Les paramètres de réglage extrêmement importants dans Mybatis modifieront le comportement par défaut de Mybatis. |
<🎜> | Définissez un alias pour le type Java, qui est uniquement lié à la configuration XML. |
<🎜> | Mapper, charge le fichier de mappage MyBatis. |
<🎜> | Plug-in, Mybatis permet aux utilisateurs d'intercepter à un certain point de la cartographie. |
Mybatis可以通过
配置多种环境,比如开发环境、测试环境和生产环境等。
不过要记住,尽管可以配置多个环境,但是SqlSessionFactory对象只能加载一个。如果你需要同时连接多个数据库,需要创建多个SqlSessionFactory实例。
在 MyBatis来进行事务的设置,其中有两种类型的事务管理器。
JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种数据源类型
UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。
JNDI:使用JNDI在外部配置数据源。
properties为外部属性,比如数据库连接信息可以配置到一个单独的properties文件中,然后在xml中进行引入。
添加一个db.properties文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=root
在mybatis主配置文件中引用
<properties resource="db.properties" /> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments>
通常MyBatis中将映射关系(非必须)和SQL语句写入到映射文件中,在配置文件中需要手动进行加载映射文件。加载映射文件使用进行加载。Mybatis中有4种加载方式。
1.使用resource,加载classpath路径进行加载。
<mappers> <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml"/> </mappers>
2.使用url路径进行加载。
<mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers>
3.使用calss进行加载,注解方式。
<!– 加载class类--> <mappers> <mapper class="使用注解的全类名"/> </mappers>
4.使用package进行加载,注解方式。
<!– 加载某个包下的所有class文件--> <mappers> <package name="com.simple.mybatis.entitys"/> </mappers>
之前,我们在sql映射xml文件中的引用实体类时,resultType需要写上实体类的全类名(包名+类名),如下:
<select id="findAll" resultType="com.simple.mybatis.entitys.Employee"> select id,last_name AS lastName,email,gender from tal_employee </select>
在mybatis主配置文件中加入
<typeAliases> <typeAlias type=“com.simple.mybatis.entitys.Employee" alias="Employee"/> </typeAliases>
这样在resultType中就可以直接使用Employee类型了。这个别名是不区分大小写的。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!