mybatis框架项目引用1

Mybatis快速入门
Mybatis介绍
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数库中的记录.JDBC- MyBatis-Hibernate
2.2 Mybatis环境搭建
添加Maven坐标

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.4.4</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.21</version>
	</dependency>
</dependencies>

建表

	CREATE TABLE users(
	id INT PRIMARY KEY AUTO_INCREMENT, 
	NAME VARCHAR(20), 
	age INT);
	INSERT INTO users(NAME, age) VALUES('Tom', 12);
	INSERT INTO users(NAME, age) VALUES('Jack', 11);

添加mybatis配置文件

  <?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>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<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>
</configuration>

定义表的实体类

		   package com.entity;
		 public class User {
			private int id;
			private String name;
			private int age;
		    //get,set方法
		}

定义userMapper接口

	package com.itmayiedu.mapper;
	import com.itmayiedu.entity.User;
	public interface UserMapper {
		public User getUser(int id);
	}

定义操作users表的sql映射文件userMapper.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">
<mapper namespace="com.itmayiedu.mapper.UserMapper">
	<select id="getUser" parameterType="int" resultType="com.itmayiedu.entity.User">
		SELECT *
		FROM users where id =#{id}
	</select>
</mapper>

mybatis.xml文件中加载配置文件

<mappers>
<mapper resource="mapper/userMapper.xml" />
</mappers>

mybatis.xml测试方法

	import java.io.File;
	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;
	import com.itmayiedu.entity.User;
	public class TestMybatis {
		public static void main(String[] args) throws IOException {
			String resource = "mybatis.xml";
			// 读取配置文件
			Reader reader = Resources.getResourceAsReader(resource);
			// 获取会话工厂
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
			SqlSession openSession = sqlSessionFactory.openSession();
			// 查询
			String sql = "com.itmayiedu.mapper.UserMapper.getUser";
			// 调用api查询
			User user = openSession.selectOne(sql, 1);
			System.out.println(user.toString());
		}
	}

sql注入案例

第一种:username=’ OR 1=1 – 或者username or 1='1
第二种:sql注释 --表示SQL注释,因此后面语句忽略;
sql注入解决
预编译sql语句

     String username = "username='  OR 1=1 -- ";
	String password = "12345";
	// String sql = "SELECT id,username FROM user_table WHERE " +
	// "username='" + username + "'AND " + "password='"
	// + password + "'";
	String sql = "SELECT id,username FROM user_table WHERE username=? AND password=?";
	Class.forName("com.mysql.jdbc.Driver");
	Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
	PreparedStatement stat = con.prepareStatement(sql);
	stat.setString(1, username);
	stat.setString(2, password);
	System.out.println(stat.toString());
	ResultSet rs = stat.executeQuery();
	while (rs.next()) {
		String id = rs.getString(1);
		String name = rs.getString(2);
		System.out.println("id:" + id + "---name:" + name);
	}

mybatis中#与$区别

但是 #{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,而 ${} 则只是简单的字符串替换,在动态解析阶段,该 sql 语句会被解析成
以上,#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。
在这里插入图片描述
优先使用 #{}。因为 ${} 会导致 sql 注入的问题

Mybatis 注解使用

Mybatis提供了增删改查注解、@select @delete @update

Generator使用

Generator 逆向生成 使用
配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
	<!-- 数据库驱动包位置 -->
	<!-- <classPathEntry location="D:\software\lib\mysql-connector-java-5.1.21.jar" /> -->
	<classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />
	<context id="DB2Tables" targetRuntime="MyBatis3">
		<commentGenerator>
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!-- 数据库链接URL、用户名、密码 -->
		<!-- <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/sy" userId="sypro" password="sypro"> -->
		<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">
		</jdbcConnection>
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>
		<!-- 生成模型的包名和位置 -->
		<javaModelGenerator targetPackage="sy.model" targetProject="D:\study\mybatis\src">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		<!-- 生成的映射文件包名和位置 -->
		<sqlMapGenerator targetPackage="sy.mapping" targetProject="D:\study\mybatis\src">
			<property name="enableSubPackages" value="true" />
		</sqlMapGenerator>
		<!-- 生成DAO的包名和位置 -->
		<javaClientGenerator type="XMLMAPPER" targetPackage="sy.dao" targetProject="D:\study\mybatis\src">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>
		<!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
		<table tableName="tbug" domainObjectName="Bug" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</generatorConfiguration>

cmd生成命令:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite

需要的jar包:
mybatis-generator-core-1.3.2.jar

发布了32 篇原创文章 · 获赞 0 · 访问量 2404

猜你喜欢

转载自blog.csdn.net/YHM_MM/article/details/104088009