JavaRush /Kurslar /All lectures for UZ purposes /NamedParameterJdbcTemplate'ни қўллаш

NamedParameterJdbcTemplate'ни қўллаш

All lectures for UZ purposes
Daraja, Dars
Mavjud

NamedParameterJdbcTemplate класи JDBC интрукцияларни номланган параметрлар билан программалашга ёрдам беради, классик аргумент-плейсхолдерлардан ( '?') фойдаланган ҳолда эмас. NamedParameterJdbcTemplate класи JdbcTemplate'ни ўраб олади ва ўралган JdbcTemplate'га ўзининг кўп ишларини топширади. Бу бобда NamedParameterJdbcTemplate'нинг фақат JdbcTemplate'дан фарқ қиладиган жиҳатлари - яъни номланган параметрлар билан JDBC интрукцияларни программалаш ҳақида сўз боради. Қуйидаги мисолда NamedParameterJdbcTemplate'ни қандай қўллаш кўрсатилади:

Java
// JDBC қўлланмасига эга бўлган айрим DAO класс...
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource) {
    this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public int countOfActorsByFirstName(String firstName) {
    String sql = "select count(*) from T_ACTOR where first_name = :first_name";
    SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);
    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
Kotlin
private val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(dataSource)
fun countOfActorsByFirstName(firstName: String): Int {
    val sql = "select count(*) from T_ACTOR where first_name = :first_name"
    val namedParameters = MapSqlParameterSource("first_name", firstName)
    return namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Int::class.java)!!
}

sql ўзгарувчисига берилган қийматдаги номланган параметр ёзилиш усулига ва namedParameters ўзгарувчисига уланган қийматга эътибор беринг ( MapSqlParameterSource тури).

Шунингдек, NamedParameterJdbcTemplate'га Map га асосланган усулдан фойдаланиб, номланган параметрлар ва уларнинг қийматларини беришингиз мумкин. NamedParameterJdbcOperations томонидан очиладиган ва NamedParameterJdbcTemplate томонидан амалга ошириладиган қолган методлар шу каби схемага эга ва бу ерда кўриб чиқилмайди.

Қуйидаги мисолда Map га асосланган усул кўрсатилган:

Java
// JDBC қўлланмасига эга бўлган айрим DAO класс...
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource) {
    this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public int countOfActorsByFirstName(String firstName) {
    String sql = "select count(*) from T_ACTOR where first_name = :first_name";
    Map<String, String> namedParameters = Collections.singletonMap("first_name", firstName);
    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters,  Integer.class);
}
Kotlin
// JDBC қўлланмасига эга бўлган айрим DAO класс...
private val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(dataSource)
fun countOfActorsByFirstName(firstName: String): Int {
    val sql = "select count(*) from T_ACTOR where first_name = :first_name"
    val namedParameters = mapOf("first_name" to firstName)
    return namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Int::class.java)!!
}

NamedParameterJdbcTemplate билан боғлиқ (ва ўша Java пакетда мавжуд) бўлган ёқимли хусусиятлардан бири SqlParameterSource интерфейси ҳисобланади. Бу интерфейснинг амалга оширилишига бир мисолни олдинги код парчаларидан бирида ( MapSqlParameterSource класс) кўргансиз. SqlParameterSource - бу NamedParameterJdbcTemplate учун номланган параметр қийматлар манбаи. MapSqlParameterSource класс эса оддий амалга оширилиши бўлиб, java.util.Map дан адаптер сифатида фойдаланувчи, бу ерда калитлар параметр номлари, қийматлар эса параметр қийматлари бўлади.

SqlParameterSourceнинг яна бир амалга оширилиши BeanPropertySqlParameterSource классидир. Ушбу класс тасодифий JavaBean (яъни JavaBean қоидаларига мувофиқ келадиган класс нусхаси)ни ўраб олиб, ўралган JavaBean'нинг хусусиятларини номланган параметрлар қийматлари манбаи сифатида ишлатади.

Қуйидаги мисолда типик JavaBean кўрсатилган:

Java
public class Actor {
    private Long id;
    private String firstName;
    private String lastName;
    public String getFirstName() {
        return this.firstName;
    }
    public String getLastName() {
        return this.lastName;
    }
    public Long getId() {
        return this.id;
    }
    // сеттеры опущены...
}
Kotlin
data class Actor(val id: Long, val firstName: String, val lastName: String)

Қуйидаги мисолда NamedParameterJdbcTemplate'ни олдинги мисолда кўрсатилган класснинг аъзолар ҳисоблагичини қайтариш учун қўллаш кўрсатилган:

Java
// JDBC қўлланмасига эга бўлган айрим DAO класс...
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource) {
    this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public int countOfActors(Actor exampleActor) {
    // номланган параметрларни юқоридаги "Actor" класси хусусиятлари билан мос келишига эътибор беринг
    String sql = "select count(*) from T_ACTOR where first_name = :firstName and last_name = :lastName";
    SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(exampleActor);
    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
Kotlin
// JDBC қўлланмасига эга бўлган айрим DAO класс...
private val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(dataSource)
private val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(dataSource)
fun countOfActors(exampleActor: Actor): Int {
    // номланган параметрларни юқоридаги "Actor" класси хусусиятлари билан мос келишига эътибор беринг
    val sql = "select count(*) from T_ACTOR where first_name = :firstName and last_name = :lastName"
    val namedParameters = BeanPropertySqlParameterSource(exampleActor)
    return namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Int::class.java)!!
}

NamedParameterJdbcTemplate класи классик JdbcTemplate'ни ўраб олишини эсда сақланг. Агар сизга ўралган JdbcTemplate нусхасига кириш керак бўлса, фақат JdbcTemplate'да мавжуд бўлган функционалликка кириш учун getJdbcOperations() методидан фойдаланиб, JdbcOperations интерфейси орқали ўралган JdbcTemplate'га киришингиз мумкин.

"Оптимал JdbcTemplate услублари" бўлимига қаранг, бу ерда NamedParameterJdbcTemplate'дан дастур контекстида фойдаланиш бўйича тавсиялар берилган.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION