10.使用注解开发
1.select 注解:
1.mybatis的主配置文件中的写法:
<!--mybatis的数据库配置-->
<configuration>
<!--可以同时配置多个数据源,一个数据源等于一个environment-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="development">
<environment id="development">
<!--事务-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://133.64.181.208:18921/wmd_test"/>
<property name="username" value="root"/>
<property name="password" value="Ustcinfo@2020"/>
</dataSource>
</environment>
</environments>
重要点1:此处要绑定的是接口类,注意,如果是想xml文件和接口类同时使用呢?
1.接口类和xml文件名称必须一致
2.接口类和xml文件必须放在同一个文件夹下
3.此处绑定的必须是接口类的路径
<mappers>
<mapper class="cn.com.wmd.dao.UserMapper"/>
</mappers>
</configuration>
2.接口类的写法
public interface UserMapper {
/**
* @param num:取多少数据
* @param offest:开始取数据的下表
* @return:查询的结果集合
*/
重点2:select标签和@Param标签配合使用,此处有个问题:
标签只适合简单语句,如果标中字段和实体类字段大多不一致时,使用标签比较繁琐!
可以标签和xml文件配合使用!
@Select("select * from public.user limit #{num} offset #{offset}" )
List<User> getUserByList(@Param("num") int num,@Param("offset") int offest);
}
3.mybatis的工具类,获取sqlsession
public class MybatisTools {
//1:通过xml文件创建SqlSessionFactory
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//2:获取SqlSession
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
4.测试类代码
public void test01(){
SqlSession sqlSession= MybatisTools.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userByList = mapper.getUserByList(2,3);
for (User user : userByList) {
System.out.println(user);
}
sqlSession.close();
}
增删改查的具体代码:
接口层:
增删改查的各种标签
public interface PersonMapper {
@Select("select * from person where name=#{name}")
Map<String,Object> getPersonByName(@Param("name") String name);
@Delete("delete from person where id=#{id}")
int deletePersonByid(@Param("id") int id);
@Update("update person set name=#{name} where id=#{id}")
int updatePerson(@Param("id") int id,@Param("name") String name);
重点1:如果是引用类型变量时不用使用@Param标签
@Insert("insert into person values(#{id},#{person_name},#{age},#{message})")
int insertPerson(Person person);
}
mybatis的主配置文件的写法:
重点2:使用package标签注入接口和xml文件
<mappers>
<package name="cn.com.wmd"/>
</mappers>
使用改标签的重要点:
1.接口类和xml文件必须同名
2.接口类和xml文件必须放在同一文件夹下
mybatis的工具类:
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getsSqlSession(){
重点3:传入的boolean值是自动提交设置,默认是false
return sqlSessionFactory.openSession(true);
}
}
关于@parm()注解
1.基本类型或者String类型需要加上
2.引用类型不用加
3.如果只有一个基本类型的话,可以忽略,但是建议大家加上
4.我们在sql中引用就是我们这里@parm()中设定的属性名
#{}和${}的区别
#{}是预编译处理,${}是字符串替换。
Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值;
Mybatis 在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止 SQL 注入,提高系统安全性。